当我读“行动中的R”一书时,我遇到了一个问题。代码newdata <- leadership[order(leadership$age),]和newdata <- leadership[order(leadership$age)]之间有什么区别,我的意思是逗号在语句中做什么?对于我下面的代码,为什么newdata包含领导中的所有列,而newdata只包含直到成年的列?
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发布于 2021-01-10 06:06:38
dataframe[i, j]是用于从R数据中子集行和列的语法,其中i表示索引或逻辑向量到子集行,j表示索引或逻辑向量到子集列。
例如,
newdata[1, 3]将从第1行返回值,第3 columnnewdata[1, 3:5]将从第1行返回值,3到5 column.newdata[1:4, 3:5]将返回1至4行和3至5列的值。
如果任何值为空,则R子集设置所有行/列。
newdata[1:4, ]将返回1至4行,所有columnsnewdata[, 1:5]将返回所有行,1至5 columnsnewdata[, ]将返回所有行和所有列。另一个警告是,如果您想只子集dataframe的列,则不一定需要,。因此,对于子集第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 NAnewnewdadta的第二种情况之所以有效,是因为与此数据集中的列数相对应的是行数大于列数。如果您的行数比列多,那么leadership[order(leadership$age)]将返回一个错误。
https://stackoverflow.com/questions/65650497
复制相似问题