我有这样的代码,在我的R数据帧生成新的列:意义方括号的时候没有逗号确定的行或列
for (i in 2:7){
v <- apply(x[,c(i,i+14,i+28, i+42)],1,sum,na.rm=T)
x[paste("income", i-1)] <- v
}
为什么没有必要为一个逗号开始之前粘贴功能?我的理解是,为了索引用方括号索引当列,那么它应该在一个逗号后面出现,就像这样:
x[,paste("income", i-1)]
我有这样的代码,在我的R数据帧生成新的列:意义方括号的时候没有逗号确定的行或列
for (i in 2:7){
v <- apply(x[,c(i,i+14,i+28, i+42)],1,sum,na.rm=T)
x[paste("income", i-1)] <- v
}
为什么没有必要为一个逗号开始之前粘贴功能?我的理解是,为了索引用方括号索引当列,那么它应该在一个逗号后面出现,就像这样:
x[,paste("income", i-1)]
所有data.frames也列出,每列是列表中的一个元素。在?[.data.frame
,它说
[
时和[[
与单个向量索引(x[i]
或x[[i]]
)使用时,它们的索引就好像它是一个列表中的数据帧。
因此,x[1]
如下列表索引:它只返回第一个元素(列)作为data.frame。您也可以通过以下方式指定多个列:x[1:3]
返回x
前三列的data.frame。
谢谢你的理解! –
在该R有两种类型的子集的。欲了解更多信息,请阅读Hadley Wickham的Advanced R中的Subsetting: Simplifying vs preserving。或者,您可以输入?"["
。简化子集简化了数据类型,而保留子集保留了数据类型。
x[, 1]
或x[[1]]
或dplyr::select(x,1)
x[, 1, drop = F]
或x[1]
让我们做一个简单的例子:
mtcars[2] %>% head(5)
给你
cyl
Mazda RX4 6
Mazda RX4 Wag 6
Datsun 710 4
Hornet 4 Drive 6
Hornet Sportabout 8
虽然
mtcars[,2] %>% head(5)
给你
6 6 4 6 8
mtcars[2] %>% typeof()
给你
"list"
虽然
mtcars[,2] %>% typeof()
给你
"double"
mtcars[2] %>% class()
给你
"data.frame"
而
mtcars[,2] %>% class()
给你
"numeric"
它是列表子集,因为数据框是列的列表。 – Frank
你能提供一些示例数据吗?我最初的想法是,你的申请创建一个向量,所以你没有额外的列,并可以使用x [粘贴(“收入”,i-1)]。 – user108363
请参阅'?“[”'进行详细讨论。 – lmo