《R语言实战》学习笔记---Chapter4(7) 基础数据管理

2023-08-15  本文已影响0人  RSP小白之路

R拥有强大的索引特性, 可以用于访问对象中的元素。 也可利用这些特性对变量或观测进行选入和排除。
总的来说,R中对象取子集,两种方式,R对象后面跟符号[]并添加条件,或者使用函数
继续以管理者服从度信息数据为例进行数据子集选取的说明。

manager <- c(1, 2, 3, 4, 5)
date <- c("10/24/08", "10/28/08", "10/1/08", "10/12/08", "5/1/09")
country <- c("US", "US", "UK", "UK", "UK")
gender <- c("M", "F", "F", "M", "F")
age <- c(32, 45, 25, 39, 99)
q1 <- c(5, 3, 3, 3, 2)
q2 <- c(4, 5, 5, 3, 2)
q3 <- c(5, 2, 5, 4, 1)
q4 <- c(5, 5, 5, NA, 2)
q5 <- c(5, 5, 2, NA, 1)
leadership <- data.frame(manager, date, country, gender, age,
q1, q2, q3, q4, q5, stringsAsFactors=FALSE)
> print(leadership )
  manager     date country gender age q1 q2 q3 q4 q5
1       1 10/24/08      US      M  32  5  4  5  5  5
2       2 10/28/08      US      F  45  3  5  2  5  5
3       3  10/1/08      UK      F  25  3  5  5  5  2
4       4 10/12/08      UK      M  39  3  3  4 NA NA
5       5   5/1/09      UK      F  99  2  2  1  2  1

选入(保留) 变量

newdata <- leadership[,c(6:10)]
> print(newdata)
  q1 q2 q3 q4 q5
1  5  4  5  5  5
2  3  5  2  5  5
3  3  5  5  5  2
4  3  3  4 NA NA
5  2  2  1  2  1

也可以通过变量名实现同样的运行效果,下面会用到一个字符串拼接函数paste

varlist <- c("q1", "q2", "q3", "q4", "q5")  # 这两句是等价的
varlist <- paste("q", 1:5, sep = '')  # 这两句是等价的
newdata1 <- leadership[varlist]
> print(newdata1 )
  q1 q2 q3 q4 q5
1  5  4  5  5  5
2  3  5  2  5  5
3  3  5  5  5  2
4  3  3  4 NA NA
5  2  2  1  2  1

剔除(丢弃) 变量

varlist <- names(leadership) %in% c("q3", "q4")
newdata <- leadership[!varlist]
>  print(newdata )
  manager     date country gender age q1 q2 q5
1       1 10/24/08      US      M  32  5  4  5
2       2 10/28/08      US      F  45  3  5  5
3       3  10/1/08      UK      F  25  3  5  2
4       4 10/12/08      UK      M  39  3  3 NA
5       5   5/1/09      UK      F  99  2  2  1

对上述语句的说明,

newdata <- leadership[c(-8,-9)]
>  print(newdata)
  manager     date country gender age q1 q2 q5
1       1 10/24/08      US      M  32  5  4  5
2       2 10/28/08      US      F  45  3  5  5
3       3  10/1/08      UK      F  25  3  5  2
4       4 10/12/08      UK      M  39  3  3 NA
5       5   5/1/09      UK      F  99  2  2  1
leadership$q3 <- leadership$q4 <- NULL
> print(leadership)
  manager     date country gender age q1 q2 q5
1       1 10/24/08      US      M  32  5  4  5
2       2 10/28/08      US      F  45  3  5  5
3       3  10/1/08      UK      F  25  3  5  2
4       4 10/12/08      UK      M  39  3  3 NA
5       5   5/1/09      UK      F  99  2  2  1

注意, NULLNA (表示缺失) 是不同的。


选入观测

选入或剔除观测(行) 通常是成功的数据准备和数据分析的一个关键方面。

>  newdata <- leadership[leadership$gender == "M" , ]
>  print(newdata )
  manager     date country gender age q1 q2 q3 q4 q5
1       1 10/24/08      US      M  32  5  4  5  5  5
4       4 10/12/08      UK      M  39  3  3  4 NA NA

上例中,选择了性别是男性的观测。


subset()函数

使用subset() 函数大概是选择变量和观测最简单的方法了。 两个示例
如下:

newdata <- subset(leadership, age >= 35 | age < 24, 
 select=c(q1, q2, q3, q4))  #选择所有age值大于等于35或小于24岁的q1至q4的变量
newdata <- subset(leadership, gender=="M" & age > 25, 
select=gender:q4)  # 选择所有25岁以上的男性,gender至q4的变量

随机抽样

sample()函数能够让你从数据集中(有放回或无放回地) 抽取大小为n 的一个随机样本。

使用以下语句从leadership 数据集中不放回地随机抽取一个大小为3的样本:

mysample <- leadership[sample(1:nrow(leadership), 3, replace=FALSE),]
> print(mysample  )
  manager     date country gender age q1 q2 q3 q4 q5
3       3  10/1/08      UK      F  25  3  5  5  5  2
1       1 10/24/08      US      M  32  5  4  5  5  5
4       4 10/12/08      UK      M  39  3  3  4 NA NA
上一篇下一篇

猜你喜欢

热点阅读