版权声明:本文为博主原创文章,未经博主允许不得转载。 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遇到一个变量名时将检查搜索路径中的数据框来定位变量。
> 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选项指定。
> 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