在R语言中创建、使用数据框

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41577291/article/details/79186924

《R语言实战》笔记 —— 创建数据集之数据框

  • 数据框是R中最常处理的数据结构,数据框不同的列可以包含不同模式(数值型、字符型等)的数据。

 1. 创建数据框

mydata <- data.frame( col1, col2, col3,...)

其中,列向量col1, col2, col3,...可为任意类型(如字符型、数值型或逻辑性),每一列的名称可由函数names指定。

# 代码1
> age <- c(25,34,28,52)
> diabetes <- c("Type1", "Type2", "Type1", "Type1")
> status <- c("Poor","Improved","Excellent","Poor")
> patientdata <- data.frame(patientID, age, diabetes, status)
> patientdata
  patientID age diabetes    status
1         1  25    Type1      Poor
2         2  34    Type2  Improved
3         3  28    Type1 Excellent
4         4  52    Type1      Poor

# 每一列数据的模式必须唯一,不过可以将多个模式的不同列放到一起组成一个数据框,这其实与数据库表十分类似。

2. 选取数据框中的元素

选取数据框中元素的方式有若干种,可以使用如矩阵中的下标记号,亦可直接指定列名。
# 代码2
> patientdata[1:2]
  patientID age
1         1  25
2         2  34
3         3  28
4         4  52

> patientdata[c("diabetes","status")]
  diabetes    status
1    Type1      Poor
2    Type2  Improved
3    Type1 Excellent
4    Type1      Poor

> patientdata$age
[1] 25 34 28 52
记号"$"是数据框中特有的表示方法,它可以选取数据框中的某个特定变量。 例如,生成变量diabetes和变量status的列联表:
> table(patientdata$diabetes, patientdata$status)
       
        Excellent Improved Poor
  Type1         1        0    2
  Type2         0        1    0

  • 在每个变量名前都需要键入一次patientdata$很麻烦,可以联合使用函数attach()和detach()或单独使用函数with()来简化代码

 (1) attach()、detach()和with()

  • 函数attach()可将数据框添加到R的搜索路径中,R遇到一个变量名时将检查搜索路径中的数据框来定位变量。
# 以R语言内置数据集mtcars为例,获取每加仑行驶英里数(mpg)变量的描述性统计量,并绘制此变量与发动机排量(disp)和车身重量(wt)的散点图
> data(mtcars)
> summary(mtcars$mpg)

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.40   15.43   19.20   20.09   22.80   33.90 

> plot(mtcars$mpg, mtcars$disp)
> plot(mtcars$mpg, mtcars$wt)

# 也可写成
> attach(mtcars)
>   summary(mpg)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.40   15.43   19.20   20.09   22.80   33.90 

>   plot(mpg, disp)
>   plot(mpg, wt)
> detach(mtcars)

# 函数detach()将数据框从搜索路径中移除,注意detach()并不会对数据框本身做任何处理,是可以被省略的,但其实它应当被例行的放入代码中,因为这是一个好的编程习惯。
# 另一种方式是使用函数with()
with(mtcars, {
  summary(mpg, disp, wt)
  plot(mpg, disp)
  plot(mpg, wt)
})
# 这种情况下,大括号{}之间的语句都针对数据框mtcars执行,这样就无需担心名称冲突问题。
# 函数with的局限性在于, 赋值仅在次函数的括号内生效。
> with(mtcars, {
+   stats <- summary(mpg)
+   stats
+ })

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.40   15.43   19.20   20.09   22.80   33.90 

> stats
Error: object 'stats' not found
# 若需要创建在with()结构以外存在的对象,使用特殊赋值符号 <<-替代标准赋值符号,可以将对象保存在with以外的全局环境中
> with(mtcars, {
+   nokeepstats <- summary(mpg)
+   keepstats <<- summary(mpg)
+ })
> nokeepstats

Error: object 'nokeepstats' not found
> keepstats
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.40   15.43   19.20   20.09   22.80   33.90 

(2) 实例标识符

  • 在病历数据中,病人编号(patientID)用于区分数据集中不同的个体。在R中,实例标识符(case identifier)可通过数据框操作函数中的rowname选项指定。
> patientID <- c('a','b','c','d')
> patientdata <- data.frame(patientID, age, diabetes, status,
+                           row.names = patientID)
> patientdata

  patientID age diabetes    status
a         a  25    Type1      Poor
b         b  34    Type2  Improved

c         c  28    Type1 Excellent
d         d  52    Type1      Poor

猜你喜欢

转载自blog.csdn.net/weixin_41577291/article/details/79186924