我有一个data.frames列表。
A <- list(aa = data.frame(var1 = c(1:3), varb = c(1:3), abu = c(1:3)),
bb = data.frame(abu = c(1:3), var1 = c(1:3), vara = c(1:3), varb = c(1:3)),
cc = data.frame(varb = c(1:3), g = c(1:3)))
输出
> A
$aa
var1 varb abu
1 1 1 1
2 2 2 2
3 3 3 3
$bb
abu var1 vara varb
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
$cc
varb g
1 1 1
2 2 2
3 3 3
>
如何在这些data.frames中订购变量,以便变量的顺序与data.frame $ aa相同?如果data.frame没有对应变量,则应该在包含NA数据的data.frame中创建变量。知道如何实现这个目标吗?
答案 0 :(得分:8)
> lapply(A, function(x) {
+ x[(setdiff(names(A$aa), names(x)))] <- NA
+ x[names(A$aa)]
+ })
$aa
var1 varb abu
1 1 1 1
2 2 2 2
3 3 3 3
$bb
var1 varb abu
1 1 1 1
2 2 2 2
3 3 3 3
$cc
var1 varb abu
1 NA 1 NA
2 NA 2 NA
3 NA 3 NA
您希望如何处理A$aa
中未显示的变量,例如A$bb$vara
?
略微更新以保留其他变量
> lapply(A, function(x) {
+ x[setdiff(names(A$aa), names(x))] <- NA
+ x[c(names(A$aa), setdiff(names(x), names(A$aa)))]
+ })
$aa
var1 varb abu
1 1 1 1
2 2 2 2
3 3 3 3
$bb
var1 varb abu vara
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
$cc
var1 varb abu g
1 NA 1 NA 1
2 NA 2 NA 2
3 NA 3 NA 3