數值型與字元型轉換總結|R語言

在日常碰到問題時出現當前「數據類型不能進行操作」的提示時還是有些腦殼疼,所以這次整理了針對R數據類型轉換的總結。理論部分主要是R for Data Science的向量節選翻譯、《R語言實戰》第二章2.2創建數據結構、《R in a Nutshell》以及猴子老師的向量ppt。

————文章結構——————

一、理論知識

  • 向量、矩陣、數據框等基本介紹
  • integer和double的區別
  • 向量和因子區別
  • tibble和data frame區別

二、舉個例子

  • 某一列文本轉為數字
  • 某一列數字轉為文本

三、總結一下

——————————————

一、理論知識

1.向量、矩陣、數據框等基本介紹

有兩種類型的向量:

(1)原子向量,其中有六種類型:logicalinteger, double, character, complexraw,integerdouble統稱為numeric(數值)向量。

(2)列表,有時稱為遞歸向量,因為列表可以包含其他列表。

原子向量和列表之間的主要區別在於原子向量是均勻的,而列表可以是異構的(即列表的數據結構可以不一致)。還有一個相關的對象:NULLNULL通常用於表示缺少矢量(與NA用於表示矢量中缺少值的情況相反)。NULL通常表現為長度為0的矢量。下圖為關係圖。

圖片來源:http://r4ds.had.co.nz/vectors.html

可以說,向量是最基本存在,那麼向量和矩陣、數組、數據框這些又是什麼關係呢?

向量最基礎。

數組:多維的向量(向量可以理解為一維數組,矩陣可以理解為二維數組)

#一維數組(向量)na <- c(1,2,3,4,5,6,7,8,9,10,11,12) nan#二維數組(矩陣)nb <- array(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), dim=c(3, 4)) nbnn#多維數組(還是數組)nc <- array(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),dim=c(3,3,2))ncn

結果:

這裡補充以下,如果矩陣按列填充,需要加上byrow=T

b <- array(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), dim=c(3, 4),byrow=T)n

而對於數據框,我的理解是,我們最常使用的excel表就是數據框模式,比如醫院數據,病人編號、性別、血型,每一列都是相同的數據結構,結合成一個大表供我們分析。

2.integer和double區別

數值型向量包含兩種類型:integer和double

我以前老糾結啥時候辨別這兩類數值型向量呢?看圖來操作:

查看數據類型最好用typeof,可以看出double比int要普遍一些,一般的c(1,2,3)都是double,但如果都加了L,變為integer了。這兩類數值型向量不用太擔心二者關係,一般R可以內部自動轉換這兩類數值然後計算。

也可以轉換,轉換代碼為:

as.double()nas.integer()n

3.向量和因子區別

建議先看猴子老師這篇文章理解因子概念猴子:如何理解R中因子(factor)的概念?

另一個例子:

上圖來源:書

再舉個例子

圖片來源:http://www.cyclismo.org/tutorial/R/types.html

總結來說,就是屬於類別的向量最好轉化為因子。比如性別(男、女)、成績評級(優秀、良好、及格、不及格),這也說明了為什麼總會看到stringasfactor=False.我們一般不選擇把向量先全部轉為因子,面對分類型變數才考慮那麼做。

4.tibble和data frame區別

這兩個功能可以說完全一樣,只是在看書過程中發現tibble慢慢比data frame更流行起來,詳情可以見這篇文章tibble 1.0.0 | RStudio Blog,在導入dplyr包後,用tibble比用data frame更快捷簡潔,tbl_df代替了table(好吧我想說,一般還是用data frame,在用到dplyr包時,改用tibble就行)

二、舉個例子

1.某一類文本轉為數字

有一組這樣的數據,我想把性別一欄轉為女為1,男為2,方便計算,如何做?

setwd("c:UsersAdministratordesktop") ndata1 <- read.csv("data1.csv")ntypeof(data1)nntable(data1$children)na <- sub("M","0",data1$gender)nb <- sub("F","1",a)ndata1$gender <- bn

結果如下:

貌似可以,但查看結構類型,還是字元串形式,需要轉為數值型才能進行後續計算。

data1$gender <- as.numeric(data1$gender)n

不用擔心了,已經完全轉換好了。

2.某一類數字轉為文本

還是這個例子,如果想把children一列轉為yes(孩子數>0)和no(孩子數=0),如何做?

輸入代碼:

data1$children[data1$children > 0] <- 1 #將有孩子的歸類為1ndata1$children[data1$children == 0] <- 0 #將孩子數為0的歸為0ndata1$children <- factor(data1$children, #轉為factor形式,替換標籤n levels=c(0,1),n labels=c("No","Yes"))n

顯示結果:

這裡補充一句,函數factor()可為類別型變數創建值標籤,代碼中levels代表變數實際值,labels表示包含了理想值標籤的字元型向量。

還有個關於factor轉換例子可以看看:R 將類別轉化為數字 ? Chengs Blog

三、總結一下

本文為數據結構的溫習,感覺向量是地基,地基里有土渣渣(有數值型【數值型又包括double和integer】,邏輯型【TRUE,FALSE,NA】,字元型等),整個房子是數組,地基+一樓是向量,二樓是矩陣,房子和附近居民區構成數據框。

文本轉為數值型(用sub替換 --> as.numeric一下)

數值型轉為文本(先轉為factor形式,再創建標籤)

嗯,完結撒花~~~


推薦閱讀:

Learn R | 機器學習中的人工神經網路(七)
PolYamoR的簡介:Python和R之間的雙向翻譯器
R|數據處理|list的轉化與轉置
R語言金融波動率建模|基於SGED分布的變參數ARIMA+EARCH動態預測模型的研究
【Kaggle實例分析】Titanic Machine Learning from Disaster

TAG:R编程语言 | 数据结构 |