我有以下数据框和 vector :
ddf = data.frame(a=rep(1,10), b=rep(2,10))
xx = c("c", "d", "e", "f")
如何新建以xx中的项目命名的空列?
我尝试了以下操作,但不起作用:
ddf = cbind(ddf, data.frame(xx))
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 10, 4
以下操作也不起作用:
for(i in 1:length(xx)){
ddf$(xx[i]) = ""
}
Error: unexpected '(' in:
"for(i in 1:length(xx)){
ddf$("
}
Error: unexpected '}' in "}"
最佳答案
这将使您到达那里:
ddf[xx] <- NA
# a b c d e f
#1 1 2 NA NA NA NA
#2 1 2 NA NA NA NA
#3 1 2 NA NA NA NA
#...
您不能直接使用ddf$xx
之类的东西,因为这将尝试分配给名为xx
的列,而不是解释xx
。您需要使用[
和[<-
函数,在处理字符串/ vector (例如ddf["columnname"]
或ddf[c("col1","col2")]
)或存储的 vector (例如ddf[xx]
)时使用方括号。选择列的原因是因为
data.frames
本质上是列表:is.list(ddf)
#[1] TRUE
as.list(ddf)
#$a
# [1] 1 1 1 1 1 1 1 1 1 1
#
#$b
# [1] 2 2 2 2 2 2 2 2 2 2
...每列对应一个列表条目。因此,如果您不使用逗号来指定行(例如ddf["name",]
或列)(例如ddf[,"name"]
),则默认情况下会获得该列。如果您使用的是0行数据集,则不能使用
NA
之类的值代替。相反,请替换为list(character(0))
,其中character(0)
可以替换为numeric(0)
,integer(0)
,logical(0)
等,具体取决于要用于新列的类。ddf <- data.frame(a=character())
xx <- c("c", "d", "e", "f")
ddf[xx] <- list(character(0))
ddf
#[1] a c d e f
#<0 rows> (or 0-length row.names)
关于r - 如何一次性将多个列添加到data.frame中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25357194/