r - 如何对 R 中的行和列进行子集化
问题描述
我是 R 新手。当我阅读 R in action 这本书时,我遇到了一个问题。newdata <- leadership[order(leadership$age),]
代码和有什么区别newdata <- leadership[order(leadership$age)]
,我的意思是逗号在语句中的作用是什么?对于我的以下代码,为什么 newdata 包含领导中的所有列,而 newnewdata 只包含直到年龄的列?
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)
names(leadership)[1:2] <- c("managerID", "testDate")
leadership$age[leadership$age == 99] <- NA
leadership <- within(leadership, {
agecat <- NA
agecat[age > 75] <- "Elder"
agecat[age >= 55 & age <= 75] <- "Middle Aged"
agecat[age < 55] <- "Young"
})
leadership
newdata <- leadership[order(leadership$age),]
newdata
newnewdadta <- leadership[order(leadership$age)]
newnewdadta
解决方案
dataframe[i, j]
是用于从 R 数据帧中对行和列进行子集化的语法,其中i
将索引或逻辑向量表示为子集行,并将j
索引或逻辑向量表示为子集列。
例如,
newdata[1, 3]
将从第一行和第三列返回值newdata[1, 3:5]
将从第一行和 3 到 5 列返回值。newdata[1:4, 3:5]
将返回值从 1 到 4 行和 3 到 5 列
如果任何值是空的,则 R 子集所有行/列。
newdata[1:4, ]
将返回 1 到 4 行和所有列newdata[, 1:5]
将返回所有行和 1 到 5 列newdata[, ]
将返回所有行和所有列。
另一个警告是,如果您只想对不一定需要的数据框列进行子集化,
。因此,对于第 3 到 5 列的子集,您不仅可以这样做,newdata[, 3:5]
而且还newdata[3:5]
可以返回相同的输出。
了解到,在您的情况下,您正在newdata <- leadership[order(leadership$age),]
根据age
列对行进行排序并选择所有列,因为j
逗号后的值为空,因此您将获得所有列。
newdata
# managerID testDate country gender age q1 q2 q3 q4 q5 agecat
#3 3 10/1/08 UK F 25 3 5 5 5 2 Young
#1 1 10/24/08 US M 32 5 4 5 5 5 Young
#4 4 10/12/08 UK M 39 3 3 4 NA NA Young
#2 2 10/28/08 US F 45 3 5 2 5 5 Young
#5 5 5/1/09 UK F NA 2 2 1 2 1 <NA>
请注意,order
返回的输出
order(leadership$age)
#[1] 3 1 4 2 5
用于按该顺序对行进行子集化。
对于第二种情况,您没有将逗号指定为子集,因此它实际上是子集列给您。
newnewdadta <- leadership[order(leadership$age)]
newnewdadta
# country managerID gender testDate age
#1 US 1 M 10/24/08 32
#2 US 2 F 10/28/08 45
#3 UK 3 F 10/1/08 25
#4 UK 4 M 10/12/08 39
#5 UK 5 F 5/1/09 NA
第二种情况newnewdadta
有效,因为巧合的是,行数大于此数据集中的列数。如果您的行数多于列数,leadership[order(leadership$age)]
则将返回错误。
推荐阅读
- python - 如何使用 uart 将接收到的数据传输到 raspberry-pi3 中的其他控制器?
- python - 如何使用 Graph API 解析所有 Facebook 目标
- sql-server - SQL查询从多个大表中选择,执行时间太长
- javascript - DataTables js columnDefs使用变量渲染函数
- azure-devops - 来自多个分支的 Azure 数据工厂部署自动化
- swift - 如何使用 Swift 检测链表中的循环/循环
- scala - 在模板变量前使用正斜杠
- ruby-on-rails - 如何使用法拉第处理来自弹性 api 的数组响应?
- flask - 导航中项目的 Flask Admin 自定义权限
- javascript - 基于传入参数的计算器函数