精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【R分享|實戰(zhàn)】 新手福利~認識數(shù)據(jù)集的內(nèi)在



 勤奮不是嘴上說說的。學(xué)習(xí)面前,主動是最基本的保證。”   --科白君


"R實戰(zhàn)"專題·第4篇
  編輯 | 科白維尼
  3811字 | 6分鐘閱讀

本期推送內(nèi)容
收到了很多朋友的建議,另外考慮到按個人的要求來創(chuàng)建含有研究信息的數(shù)據(jù)集,這是任何數(shù)據(jù)分析的第一步。同時,這也是學(xué)習(xí)R語言過程重要的入門環(huán)節(jié)。特別是初學(xué)過程,更多的是模仿學(xué)習(xí)。由于不理解數(shù)據(jù)結(jié)構(gòu),導(dǎo)致無法正確模仿數(shù)據(jù)格式并無法正常運行代碼。因此,本期介紹R語言的基礎(chǔ)內(nèi)容:數(shù)據(jù)集概念數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)輸入導(dǎo)出。主要講解相應(yīng)內(nèi)容的R包及函數(shù)使用,希望大家學(xué)習(xí)后能解決以下問題:1) 數(shù)據(jù)集有哪些類型的變量組成;2) 清楚數(shù)據(jù)集的數(shù)據(jù)結(jié)構(gòu);3) 讀取各類型文件的數(shù)據(jù);4) 成功導(dǎo)出所需要的數(shù)據(jù)。


01

數(shù)據(jù)集的概念


數(shù)據(jù)集通常是由數(shù)據(jù)構(gòu)成的一個矩形數(shù)組,行表示觀測,列表示變量。例如,土壤學(xué)領(lǐng)域(土壤基本的理化因子)的通常數(shù)據(jù)情況:當(dāng)然行列的數(shù)據(jù)類型也并非固定。


SOC
pHTN
TP
Sample1--
--
----
Sample2
--
--
--
--
Sample3----
----
...
...
.........

在R中,數(shù)據(jù)集包括以下兩步:1)選擇一種數(shù)據(jù)結(jié)構(gòu)來儲存數(shù)據(jù);2)將數(shù)據(jù)輸入或?qū)氲竭@個數(shù)據(jù)結(jié)構(gòu)中。另外,R主要可處理的數(shù)據(jù)類型包括數(shù)值型、字符型、邏輯型(TRUE or FALSE)、復(fù)數(shù)型(虛數(shù))和原生型(字節(jié))。

02

數(shù)據(jù)結(jié)構(gòu)的類型


R擁有許多用于存儲數(shù)據(jù)的對象類型,包括標(biāo)量、向量、矩陣、數(shù)組、數(shù)據(jù)框和列表。它們在儲存數(shù)據(jù)的類型創(chuàng)建方式、結(jié)構(gòu)復(fù)雜度,及定位和訪問其中某元素的方法等均有所差異。接下來一一介紹。

1)標(biāo)量
與C語言不同,R語言中,單個數(shù)據(jù)(標(biāo)量)沒有單獨的數(shù)據(jù)類型,它只是向量的一種特例,標(biāo)量以單元素向量的形式出現(xiàn)。標(biāo)量是只含一個元素的向量,例如f <- 3、g <- "US"和h <- TRUE。它們用于保存常量。因此,R中最基本的數(shù)據(jù)類型是向量。
a <-  -5  # 可以是數(shù)字1,'abc’字符,TRUE or FALSE 等

2)向量

向量是用于存儲數(shù)值型、字符型或邏輯型數(shù)據(jù)的一維數(shù)組。執(zhí)行組合功能的函數(shù)c()可用來創(chuàng)建向量。例如:

a <- c(2, 3, 4, 5, 5, -1, -2) # a屬于數(shù)值型向量
b <- c("first", "second", "third") # b屬于字符型向量
c <- c(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE) # c是邏輯型向量
我們可以使用a[c(2, 4)]訪問向量a中的第二個和第四個元素。此外,我們具體看下面例子:

3)矩陣

矩陣是一個二維數(shù)組,只是每個元素都擁有相同的數(shù)據(jù)類型(同上三種)??捎煤瘮?shù)matrix()創(chuàng)建矩陣。

x <- matrix(1:20, nrow = 4, ncol = 3) #1 創(chuàng)建一個4×3的矩陣
x
cells <- c(1, 26, 24, 68)
rnames <- c("R1", "R2")
cnames <- c("C1", "C2")
mymatrix <- matrix(cells, nrow = 3, ncol = 3, byrow = TRUE,
dimnames = list(rnames, cnames)) #2 按行填充3×3的矩陣,根據(jù)邏輯byrow = TRUE
mymatrix
mymatrix <- matrix(cells, nrow = 2, ncol = 2, byrow = FALSE,
dimnames = list(rnames, cnames)) #3 按列填充3×3的矩陣,根據(jù)邏輯byrow = FALSE
mymatrix


我們可以使用下標(biāo)和方括號來選擇矩陣中的行、列或元素。x[i, ]指矩陣中x中的第i行,x[i, j]指第i行第j個元素。選擇多行或多列時,下標(biāo)i和j可為數(shù)值型向量。For example:


x <- matrix(1:9, nrow = 3) # 構(gòu)建了一個內(nèi)容為數(shù)字1到9的3×3矩陣 默認下,按行列填充
x # 查看所構(gòu)建的矩陣
x[3,] # 選擇了第三行的元素
x[,3] # 選擇了第三列的元素
x[1,3] # 又選擇第一行第三列的元素
x[1,c(2,3)] # 最后選擇了位于第一行第二、第三的元素

4)數(shù)組

數(shù)組(array)與矩陣類似,但緯度可以大于2。數(shù)組可以用array函數(shù)構(gòu)建,例如:

my_array <- (vector, dimensions, dimnames)

### vector包含數(shù)組中的數(shù)據(jù),dimen.是數(shù)值型向量,給出各維度下標(biāo)的最大值,而dimnames是可選的、各維度名稱標(biāo)簽的列表。

接下來,構(gòu)建一個三維(2×3×3)數(shù)值型數(shù)組:

dim1 <- c("a1", "a1") # 引號內(nèi)的名稱是我隨便輸入的,都是字符型
dim2 <- c("bb1", "bb2", "bb3")
dim3 <- c("ccc1", "ccc2", "ccc3")
z <- array(1:18, c(2, 3, 3), dimnames = list(dim1, dim2, dim3))
z

5)數(shù)據(jù)框

由于不同的列包含不同類型的數(shù)據(jù),數(shù)據(jù)框的概念較矩陣來說更一般。通常數(shù)據(jù)框是R中最常處理的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)框可通過函數(shù)data.frame()創(chuàng)建:
mydata <- data.frame (col1,col2,col3) # col1,2,3 等可為任何類型。每一列的名稱可以由names函數(shù)指定
具體例子:

ID <- c(1, 2, 3, 4)age <- c(20, 35, 15, 55)
diabetes <- c("T1", "T2", "T3" , "T4")
status <- c("Poor", "Improved", "Excellent", "Improved")
patientdata <- data.frame(ID, age, diabetes, statues)
patientdata
#需要注意,每一列數(shù)據(jù)的類型必須唯一,但可以將多個類型的不同列放到一起組成數(shù)據(jù)框。

關(guān)于選取數(shù)據(jù)框中的元素的方式有很多種,我們可以使用矩陣中的方括號標(biāo)記法,也可直接指定列名:

patientdata[1:2] # 選取第一列到第二列的數(shù)據(jù)
patientdata[c("diabetes","status")] # 選取變量名為d...,s...的數(shù)據(jù)
patientdata$age # 標(biāo)記號$是用來選取數(shù)據(jù)框中的特定age變量

#另外,如果想生成變量diabetes和變量status的列聯(lián)表,可以使用table函數(shù)
table(patientdata$diabetes, patientdata$status)


6)因子
類別(名義型)變量和有序類別(有序型)變量在R中稱為因子(factor)。因子在R中非常重要,因為它決定了數(shù)據(jù)的分析方式以及如何進行視覺呈現(xiàn)。例如:

ID <- c(1, 2, 3, 4)
age <- c(25, 35, 15, 55)
diabetes <- c("T1", "T2", "T1", "T1")
status <- c("Poor", "Improved", "Excellent", "Poor")
diabetes <- factor(diabetes) # factor 函數(shù)因子用于將向量編碼為因子
status <- factor(status, order = TRUE) # order 邏輯標(biāo)志,用于確定是否應(yīng)該將級別視為有序的
patientdata <- data.frame(ID, age, diabetes, status) # 構(gòu)建新的數(shù)據(jù)集
str(patientdata) # 查看數(shù)據(jù)集結(jié)構(gòu) 也可以用class 但是這個函數(shù)查閱的結(jié)果比較簡單
summary(patientdata) # summary是一個通用函數(shù),用于生成各種模型擬合函數(shù)結(jié)果


7)列表

列表(list)是R的數(shù)據(jù)類型中最為復(fù)雜的一種。通常,列表就是一些對象或成分的有序集合。列表允許你整合若干對象到單個對象名下。例如,某個列表中可能包含若干向量、矩陣、數(shù)據(jù)框,甚至其他列表的組合。可用list()函數(shù)構(gòu)建列表:

mylist <- list(obj1, obj2,...)
# 也可以為列表中的對象命名
mylist <- list(name1=obj1, name2=obj2,...)

具體例子:

a <- "my list" # 構(gòu)建列表的title
b <- c(20, 25, 26, 35)
c <- matrix(1:8, nrow=4) # 構(gòu)建一個矩陣 8個值 4行
d <- c("first", "second", "third")
mylist <- list(title=a, ages=b, c, d) # 構(gòu)建一個列表, 并用age 命名
mylist # 輸出列表內(nèi)容 包含一個字符串、數(shù)值型向量、矩陣及字符型向量


提取數(shù)據(jù):
mylist[[2]]
mylist[["ages"]]
# 兩種方法提取出一樣的結(jié)果


03

數(shù)據(jù)的輸入


使用R進行數(shù)據(jù)分析的時候,首先要導(dǎo)入數(shù)據(jù)。R語言支持的數(shù)據(jù)類型很多,包括、excel文件,csv文件,txt文件等。很多人初學(xué)者甚至還沒開始就已經(jīng)對R語言放棄了,正是倒在了數(shù)據(jù)導(dǎo)入這一步。下面給大家提供幾種常見的數(shù)據(jù)導(dǎo)入方法。

1)使用鍵盤手動輸入數(shù)據(jù)
有兩種常見的方式:用R內(nèi)置的文本編輯器和直接在代碼中導(dǎo)入數(shù)據(jù)。首先,利用文本編譯器。
R中的函數(shù)edit()自動調(diào)用一個手動輸入數(shù)據(jù)的文本編譯器。步驟如下:
①創(chuàng)建一個空的數(shù)據(jù)框/矩陣,其中變量名和變量的類型需與理想中的最終數(shù)據(jù)集一致;
②針對這個數(shù)據(jù)對象調(diào)用文本編譯器,輸入數(shù)據(jù),并將結(jié)果保存回此數(shù)據(jù)對象。

例子:先創(chuàng)建一個名為data的數(shù)據(jù)框,含有三個變量:數(shù)值型,字符型和數(shù)值型。然后使用文本編譯器,鍵入數(shù)據(jù),最后保存結(jié)果。
data <- data.frame(time=numeric(0), type=character(0), hight=numeric(0)) # 0 表示不定義具體值
data <- edit(data)

通過edit()函數(shù)調(diào)用出數(shù)據(jù)編輯器,如下圖

R軟件彈出數(shù)據(jù)編輯器后,我們就可以點擊第四列格子進行變量的定義。例如這里點擊"var4"后,就會彈出一個編輯器,這里我們就可以對變量的變量名和類型(數(shù)值,字符)進行定義。

定義好變量后,可以進行手動輸入數(shù)據(jù)。不過這種方式只適合少量的數(shù)據(jù)輸入,當(dāng)數(shù)據(jù)量比較大時,建議使用其他的方式導(dǎo)入數(shù)據(jù)。

此外,可以直接在程序中嵌入數(shù)據(jù)集,例如:

mydatatxt <- "
   age gender weight
   25 m 166
   30 f 115
   18 f 120
 "
mydata <- read.table(header = TRUE,text=mydatatxt)

2)使用函數(shù)導(dǎo)入數(shù)據(jù)(主要以excel文件格式為主

①導(dǎo)入csv或txt文件,使用基礎(chǔ)的read.table()函數(shù)導(dǎo)入數(shù)據(jù)。另外,也可以使用read.csv()函數(shù)。該函數(shù)可以讀入一個表格格式的文件并保存為一個數(shù)據(jù)框?;镜恼Z法表達式:

dat <- read.table(file, header=TRUE, sep="", row.names=1)
dat <- read.csv(file, header=TRUE, sep=",", row.names=1)


主要的參數(shù)理解:
file:文件路徑(注意:Windows路徑要用斜杠 " / " or 雙反斜杠 " \\ ")。
header:默認為FALSE,即數(shù)據(jù)框的列名默認系統(tǒng)自帶的V1,V2...Vn,為TRUE時第一行作為每列的列名。
sep:分隔符,默認為空格,可以設(shè)置為逗號(comma) sep=",",分號(semicolon) sep=" ; "及制表符(tab)。
row.names:是可選參數(shù),表示行標(biāo)識符的變量。當(dāng)row.names=1時表示第一列作為每一行的行名,當(dāng)row...=2時,表示第二列,數(shù)字表示某一列。特別是,該參數(shù)使用的時候,該列中不能存在重復(fù)名,否則報錯。

具體:

data <- read.table("C:/Program Files/R/R-3.6.1/library/xx.txt", header = T)
data <- read.csv("C:/Program Files/R/R-3.6.1/library/xx.csv", header = T)

②導(dǎo)入excel文件,需要用到R包library(xlsx),可以直接導(dǎo)入Excel工作表。但是要確保第一次使用前先進行下載和安裝。同時也需要xlsxJars和rJava包還有openxlsx包,及一個正常工作的Java安裝(http://java.com)。優(yōu)勢:一個文件夾存儲多個sheet,數(shù)據(jù)讀取的時候不需要新建多個文件。基本的語法表達式:

mydata <- read.xlsx(file, sheet=n)

主要的參數(shù)理解:
file:文件路徑(注意:Windows路徑要用斜杠 " / " or 雙反斜杠 " \\ ")。
sheet:n表示xlsx格式下,不同sheet的表格。n=1表示讀取第一個sheet,以此類推。特別是,如果漏寫n會報錯。

具體過程:

library("xlsxjars")
library("rJava")
library("xlsx")
library(
"openxlsx")
data <- read.xlsx("C:/Program Files/R/R-3.6.1/library/xx.xlsx", 1)

04

數(shù)據(jù)的導(dǎo)出


通常在分析時候,我們需要用到計算后的結(jié)果,需要把計算的結(jié)果導(dǎo)出。這里我們常用到的函數(shù)有write.table,write.csv來導(dǎo)出txt,csv格式的文件。另外,write.xlsx用來導(dǎo)出xlsx格式的文件。這里,我們選擇最基礎(chǔ)的write.table的語法表達式進行介紹,剩下的導(dǎo)出方式建議大家用help()函數(shù)進行查閱或 ?函數(shù)名進行查閱:

a <- data(mpg) # 將R語言自帶的數(shù)據(jù)集mpg賦值給a
write.table (a, file ="", sep ="", row.names =TRUE, col.names =TRUE, quote =TRUE) # 導(dǎo)出a名下的數(shù)據(jù)

x:需要導(dǎo)出的數(shù)據(jù),這里是指前面賦值過的數(shù)據(jù)。

file:導(dǎo)出的文件路徑。

sep:分隔符,默認為空格(" "),也就是以空格為分割列。

row.names:是否導(dǎo)出行序號,默認為TRUE,也就是導(dǎo)出行序號。

col.names:是否導(dǎo)出列名,默認為TRUE,也就是導(dǎo)出列名。

quote:字符串是否使用引號表示,默認為TRUE,也就是使用引號表示。

例如:將數(shù)據(jù)框C輸出為.csv文件

C <- data(iris)
write.table(C, file="ABC.csv",sep = ",",row.names=FALSE) # 將保存ABC文件在R的工作目錄下,當(dāng)不加sep = " "時,輸出的數(shù)據(jù)會在同一個單元格里,因此要加“,”。 

附上完整的代碼:

###########################
# 新手福利~認識數(shù)據(jù)集的內(nèi)在
###########################

#1 標(biāo)量
a <- -5  # 可以是數(shù)字1,'abc’字符,TRUE or FALSE 等

#2 向量
a <- c(2, 3, 4, 5, 5, -1, -2) # a屬于數(shù)值型向量
b <- c("first", "second", "third") # b屬于字符型向量
c <- c(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE) # c是邏輯型向量

#3 矩陣
x <- matrix(1:20, nrow = 4, ncol = 3) #1 創(chuàng)建一個4×3的矩陣
x
cells <- c(1, 26, 24, 68)
rnames <- c("R1", "R2")
cnames <- c("C1", "C2")
mymatrix <- matrix(cells, nrow = 3, ncol = 3, byrow = TRUE,
                   dimnames = list(rnames, cnames)) #2 按行填充3×3的矩陣,根據(jù)邏輯byrow = TRUE
mymatrix
mymatrix <- matrix(cells, nrow = 2, ncol = 2, byrow = FALSE,
                   dimnames = list(rnames, cnames)) #3 按列填充3×3的矩陣,根據(jù)邏輯byrow = FALSE
mymatrix

# 提取數(shù)據(jù)
x <- matrix(1:9, nrow = 3) # 構(gòu)建了一個內(nèi)容為數(shù)字1到9的3×3矩陣 默認下,按行列填充
x # 查看所構(gòu)建的矩陣
x[3,] # 選擇了第三行的元素
x[,3] # 選擇了第三列的元素
x[1,3] # 又選擇第一行第三列的元素
x[1,c(2,3)] # 最后選擇了位于第一行第二、第三的元素

#4 數(shù)組
my_array <- (vector, dimensions, dimnames)
dim1 <- c("a1", "a1") # 引號內(nèi)的名稱是我隨便輸入的,都是字符型
dim2 <- c("bb1", "bb2", "bb3")
dim3 <- c("ccc1", "ccc2", "ccc3")
z <- array(1:18, c(2, 3, 3), dimnames = list(dim1, dim2, dim3))
z
 
#5 數(shù)據(jù)框
mydata <- data.frame (col1,col2,col3) # col1,2,3 等可為任何類型。每一列的名稱可以由names函數(shù)指定

# 具體例子
ID <- c(1, 2, 3, 4)age <- c(20, 35, 15, 55)
diabetes <- c("T1", "T2", "T3" , "T4")
status <- c("Poor", "Improved", "Excellent", "Improved")
patientdata <- data.frame(ID, age, diabetes, statues)
patientdata
#需要注意,每一列數(shù)據(jù)的類型必須唯一,但可以將多個類型的不同列放到一起組成數(shù)據(jù)框。

# 數(shù)據(jù)提取
patientdata[1:2] # 選取第一列到第二列的數(shù)據(jù)
patientdata[c("diabetes","status")] # 選取變量名為d...,s...的數(shù)據(jù)
patientdata$age # 標(biāo)記號$是用來選取數(shù)據(jù)框中的特定age變量
#另外,如果想生成變量diabetes和變量status的列聯(lián)表,可以使用table函數(shù)
table(patientdata$diabetes, patientdata$status)

#6 因子
ID <- c(1, 2, 3, 4)
age <- c(25, 35, 15, 55)
diabetes <- c("T1", "T2", "T1", "T1")
status <- c("Poor", "Improved", "Excellent", "Poor")
diabetes <- factor(diabetes) # factor 函數(shù)因子用于將向量編碼為因子
status <- factor(status, order = TRUE) # order 邏輯標(biāo)志,用于確定是否應(yīng)該將級別視為有序的
patientdata <- data.frame(ID, age, diabetes, status) # 構(gòu)建新的數(shù)據(jù)集
str(patientdata) # 查看數(shù)據(jù)集結(jié)構(gòu) 也可以用class 但是這個函數(shù)查閱的結(jié)果比較簡單
summary(patientdata) # summary是一個通用函數(shù),用于生成各種模型擬合函數(shù)結(jié)果

#7 列表
# 具體例子
a <- "my list" # 構(gòu)建列表的title
b <- c(20, 25, 26, 35)
c <- matrix(1:8, nrow=4) # 構(gòu)建一個矩陣 8個值 4行
d <- c("first", "second", "third")
mylist <- list(title=a, ages=b, c, d) # 構(gòu)建一個列表, 并用age 命名
mylist # 輸出列表內(nèi)容 包含一個字符串、數(shù)值型向量、矩陣及字符型向量

# 提取數(shù)據(jù)
mylist[[2]]
mylist[["ages"]] # 兩種方法提取出一樣的結(jié)果

# 數(shù)據(jù)的輸入和導(dǎo)出部分就不在這做整合了,大家可以根據(jù)推送內(nèi)容進行學(xué)習(xí)

Tips:
1. 單個向量中的數(shù)據(jù)必須擁有相同的類型或模式(數(shù)值型、字符型或邏輯型),同一向量中無法混雜不同類型的數(shù)據(jù)。
2. 矩陣都是二維的,與向量相似,僅能包含一種數(shù)據(jù)類型。超過二維時,考慮使用數(shù)組。當(dāng)數(shù)據(jù)為多種類型時,可考慮使用數(shù)據(jù)框。
3. 另外,在已經(jīng)構(gòu)建好的數(shù)據(jù)框里,除了通過edit()能夠編輯,fix()函數(shù)也可以編輯數(shù)據(jù)框里的數(shù)值型和字符型變量。

4. write.table / read.table 既可以讀取txt文件也可以導(dǎo)入csv格式的文件。

參考材料:
R in action (the second  edition)
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【R語言學(xué)習(xí)5】R語言常用數(shù)據(jù)結(jié)構(gòu)解讀
R語言實戰(zhàn)(第2版)——第2章-2.2數(shù)據(jù)結(jié)構(gòu)
給女朋友寫的生統(tǒng)資料_Part4
R語言學(xué)習(xí)筆記
R語言 | 第四講:R語言數(shù)據(jù)類型及結(jié)構(gòu)
生信分析人員如何系統(tǒng)入門R(2019更新版)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服

主站蜘蛛池模板: 思南县| 伊金霍洛旗| 承德市| 孟连| 盐源县| 时尚| 汨罗市| 闵行区| 新绛县| 黔西| 南靖县| 个旧市| 军事| 东宁县| 淮阳县| 渝中区| 邵武市| 六安市| 成武县| 翁源县| 惠东县| 连城县| 渭南市| 丹寨县| 曲松县| 子长县| 彝良县| 六盘水市| 长沙县| 泊头市| 正安县| 武陟县| 平度市| 潢川县| 左权县| 报价| 岳池县| 昌乐县| 大名县| 温宿县| 渝中区|