0

我有一个这样的清单

A <- data.frame(a = c(1, 2), b = c(3, 4))
B <- data.frame(c = c(1, 2), d = c(3, 4))
g <- list(var1 = A, var2 = B)

生产

> g
$var1
  a b
1 1 3
2 2 4

$var2
  c d
1 1 3
2 2 4

现在我想像这样转置列表元素

lapply(g, function(x) data.frame(t(x)))

但这会产生 a、b、cd 作为行名,这不是我想要的

> lapply(g, function(x) data.frame(t(x)))
$var1
  X1 X2
a  1  2
b  3  4

$var2
  X1 X2
c  1  2
d  3  4

我想在这些 data.frames 中为 a、b、c 和 d 生成一个新列。如何做到这一点?

4

1 回答 1

1

第 1 点:如果您要转置数据,这很可能意味着您应该使用数组,而不是 data.frames。

但是,如果这确实是您想要做的,那么只需cbind()在列名中:

lapply(g, function(x) as.data.frame(cbind(colnames(x), t(x))))
$var1
  V1 V2 V3
a  a  1  2
b  b  3  4

$var2
  V1 V2 V3
c  c  1  2
d  d  3  4
于 2012-05-30T11:41:09.887 回答