我有以下数据帧和向量:
ddf = data.frame(a=rep(1,10), b=rep(2,10))
xx = c("c", "d", "e", "f")
Run Code Online (Sandbox Code Playgroud)
如何使用xx中的项目命名的新空列?
我试过以下但它不起作用:
ddf = cbind(ddf, data.frame(xx))
Error in data.frame(..., check.names = FALSE) :
arguments imply differing number of rows: 10, 4
Run Code Online (Sandbox Code Playgroud)
以下也不起作用:
for(i in 1:length(xx)){
ddf$(xx[i]) = ""
}
Error: unexpected '(' in:
"for(i in 1:length(xx)){
ddf$("
}
Error: unexpected '}' in "}"
Run Code Online (Sandbox Code Playgroud)
the*_*ail 34
这会让你到达那里:
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
#...
Run Code Online (Sandbox Code Playgroud)
你不能直接使用类似的东西,ddf$xx因为这会尝试分配一个被调用的列xx而不是解释xx.你需要使用[和[<-函数,在处理字符串时使用方括号 - 比如ddf["columnname"].
它选择列的原因是因为ddf[c("col1","col2")]列表本质上是:
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
Run Code Online (Sandbox Code Playgroud)
...每列对应一个列表条目.因此,如果您不使用逗号来指定行,data.frames或类似ddf["name",]列,则默认情况下会获得该列.
这似乎成功了:
> cbind(ddf, setNames( lapply(xx, function(x) x=NA), xx) )
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
4 1 2 NA NA NA NA
5 1 2 NA NA NA NA
6 1 2 NA NA NA NA
7 1 2 NA NA NA NA
8 1 2 NA NA NA NA
9 1 2 NA NA NA NA
10 1 2 NA NA NA NA
Run Code Online (Sandbox Code Playgroud)