[英]How to subset rows and columns in 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 dataframe 中對行和列進行子集化的語法,其中i
表示索引或邏輯向量到子集行, j
表示索引或邏輯向量到子集列。
例如,
newdata[1, 3]
將從第一行和第三列返回值newdata[1, 3:5]
將從第 1 行和第 3 到第 5 列返回值。newdata[1:4, 3:5]
將返回值從 1 到 4 行和 3 到 5 列如果任何值為空 R 子集所有行/列。
newdata[1:4, ]
將返回 1 到 4 行和所有列newdata[, 1:5]
將返回所有行和 1 到 5 列newdata[, ]
將返回所有行和所有列。 另一個警告是,如果您只想對 dataframe 的列進行子集化,則不一定需要,
. 因此,對於第 3 到 5 列的子集,您不僅可以執行newdata[, 3:5]
,還可以執行返回相同 output 的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
返回的output
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)]
將返回錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.