我有一个名为cols
的列表,其中包含列名:
cols <- c('Column1','Column2','Column3')
我想重现这个命令,但要调用列表:
data.frame(Column1=rnorm(10))
以下是我尝试时会发生的事情:
> data.frame(cols[1]=rnorm(10))
Error: unexpected '=' in "data.frame(I(cols[1])="
如果我将cols[1]
包裹在I()
或eval()
中,也会发生同样的事情。
如何将该项目中的项目输入data.frame()
命令?
更新
对于某些背景,我定义了一个函数calc.means()
,它接受一个数据框和一个变量列表,并执行一个大而复杂的ddply操作,总结在变量指定的级别。
我正在尝试使用data.frame()
命令将聚合级别向上移回最顶层,在每一步重新运行calc.means()
并使用rbind()
粘合结果相互之间。我需要添加带有'All'值的虚拟列,以使rbind正常工作。
我正在将cast
- 像边距功能一样滚动到ddply中,基本上,我不想为每次运行重新键入列名。这是完整的代码:
cols <- c('Col1','Col2','Col3')
rbind ( calc.means(dat,cols),
data.frame(cols[1]='All', calc.means(dat, cols[2:3])),
data.frame(cols[1]='All', cols[2]='All', calc.means(dat, cols[3]))
)
答案 0 :(得分:2)
使用可以使用structure
:
cols <- c("a","b")
foo <- structure(list(c(1, 2 ), c(3, 3)), .Names = cols, row.names = c(NA, -2L), class = "data.frame")
我不明白为什么你这样做!
答案 1 :(得分:1)
我不确定如何直接执行此操作,但您可以简单地跳过在data.frame()命令中指定名称的步骤。假设您将data.frame()的结果存储在名为foo的变量中,您可以简单地执行:
姓名(foo)&lt; - cols
创建数据框后
答案 2 :(得分:1)
有一招。你可能会混淆列表:
cols_dummy <- setNames(rep(list("All"), 3), cols)
然后,如果你使用一个 paren进行呼叫列表,那么你应该得到你想要的东西
data.frame(cols_dummy[1], calc.means(dat, cols[2:3]))
您可以像setNames(list("All"), cols[1])
一样使用它,但我认为它不太优雅。
示例:
some_names <- list(name_A="Dummy 1", name_B="Dummy 2") # equivalent of cols_dummy from above
data.frame(var1=rnorm(3), some_names[1])
# var1 name_A
# 1 -1.940169 Dummy 1
# 2 -0.787107 Dummy 1
# 3 -0.235160 Dummy 1
答案 3 :(得分:0)
我相信assign()函数是你的答案:
cols <- c('Col1','Col2','Col3')
data.frame(assign(cols[1], rnorm(10)))
返回:
assign.cols.1...rnorm.10..
1 -0.02056822
2 -0.03675639
3 1.06249599
4 0.41763399
5 0.38873118
6 1.01779018
7 1.01379963
8 1.86119518
9 0.35760039
10 1.14742560
使用lapply()或sapply()函数,您应该能够循环cbind()进程。类似的东西:
operation <- sapply(cols, function(x) data.frame(assign(x, rnorm(10))))
final <- data.frame(lapply(operation, cbind))
返回:
Col1.assign.x..rnorm.10.. Col2.assign.x..rnorm.10.. Col3.assign.x..rnorm.10..
1 0.001962187 -0.3561499 -0.22783816
2 -0.706804781 -0.4452781 -1.09950505
3 -0.604417525 -0.8425018 -0.73287079
4 -1.287038060 0.2545236 -1.18795684
5 0.232084366 -1.0831463 0.40799046
6 -0.148594144 0.4963714 -1.34938144
7 0.442054119 0.2856748 0.05933736
8 0.984615916 -0.0795147 -1.91165189
9 1.222310749 -0.1743313 0.18256877
10 -0.231885977 -0.2273724 -0.43247570
然后,清理列名:
colnames(final) <- cols
返回:
Col1 Col2 Col3
1 0.19473248 0.2864232 0.93115072
2 -1.08473526 -1.5653469 0.09967827
3 -1.90968422 -0.9678024 -1.02167873
4 -1.11962371 0.4549290 0.76692067
5 -2.13776949 3.0360777 -1.48515698
6 0.64240694 1.3441656 0.47676056
7 -0.53590163 1.2696336 -1.19845723
8 0.09158526 -1.0966833 0.91856639
9 -0.05018762 1.0472368 0.15475583
10 0.27152070 -0.2148181 -1.00551111
干杯,
亚当