我有这样的数据
df<- list(structure(list(A = c(0.1807, 0.2369, 0.2432, 0.2772, 0.2833,
0.3194, 0.407, 0.4507, 0.5023, 0.5064, 0.5183, 0.5414, 0.5527
), B = c(0.1139, 0.1417, 0.1028, 0.2472, 0.025, 0.2917, 0.3917,
0.4417, 0.4472, 0.4639, 0.5028, 0.5194, 0.5305)), .Names = c("A",
"B"), row.names = c(NA, -13L), class = "data.frame"), structure(list(
A = c(0.1807, 0.2369, 0.2432, 0.2772, 0.2833, 0.3194, 0.407,
0.4507, 0.5023), B = c(0.1139, 0.1417, 0.1028, 0.2472, 0.025,
0.2917, 0.3917, 0.4417, 0.4472)), .Names = c("A", "B"), row.names = c(NA,
-9L), class = "data.frame"), structure(list(A = c(0.1807, 0.2369,
0.2432, 0.2772), B = c(0.1139, 0.1417, 0.1028, 0.2472)), .Names = c("A",
"B"), row.names = c(NA, -4L), class = "data.frame"))
我希望得到像这样的输出
A B A B A B
0.1807 0.1139 0.1807 0.1139 0.1807 0.1139
0.2369 0.1417 0.2369 0.1417 0.2369 0.1417
0.2432 0.1028 0.2432 0.1028 0.2432 0.1028
0.2772 0.2472 0.2772 0.2472 0.2772 0.2472
0.2833 0.025 0.2833 0.025
0.3194 0.2917 0.3194 0.2917
0.407 0.3917 0.407 0.3917
0.4507 0.4417 0.4507 0.4417
0.5023 0.4472 0.5023 0.4472
0.5064 0.4639
0.5183 0.5028
0.5414 0.5194
0.5527 0.5305
基本上将每个列表放在另一个列表旁边(虽然它们的大小不同)
答案 0 :(得分:2)
我们可以使用cbind.fill
rowr
library(rowr)
res <- do.call(cbind.fill, c(df, fill=NA))
res
# A B A B A B
#1 0.1807 0.1139 0.1807 0.1139 0.1807 0.1139
#2 0.2369 0.1417 0.2369 0.1417 0.2369 0.1417
#3 0.2432 0.1028 0.2432 0.1028 0.2432 0.1028
#4 0.2772 0.2472 0.2772 0.2472 0.2772 0.2472
#5 0.2833 0.0250 0.2833 0.0250 NA NA
#6 0.3194 0.2917 0.3194 0.2917 NA NA
#7 0.4070 0.3917 0.4070 0.3917 NA NA
#8 0.4507 0.4417 0.4507 0.4417 NA NA
#9 0.5023 0.4472 0.5023 0.4472 NA NA
#10 0.5064 0.4639 NA NA NA NA
#11 0.5183 0.5028 NA NA NA NA
#12 0.5414 0.5194 NA NA NA NA
#13 0.5527 0.5305 NA NA NA NA
最好在数据集中使列名称唯一
colnames(res) <- make.unique(colnames(res))
此外,缺失值为NA
。如果我们需要""
,请将fill=NA
更改为fill=""
),即
do.call(cbind.fill, c(df, fill=''))
,但这也会将列的class
更改为character/factor
答案 1 :(得分:1)
下面的代码会产生看起来非常类似于预期输出的内容:
library(data.table)
cols <- colnames(df[[1L]])
long <- rbindlist(df, idcol = "df.id")
wide <- dcast(long, rowid(df.id) ~ df.id, as.character, value.var = cols, fill = "")[
, .SD, .SDcols = as.vector(outer(cols, seq_along(df), paste, sep = "_"))]
setnames(wide, rep(cols, length(df)))
wide
A B A B A B 1: 0.1807 0.1139 0.1807 0.1139 0.1807 0.1139 2: 0.2369 0.1417 0.2369 0.1417 0.2369 0.1417 3: 0.2432 0.1028 0.2432 0.1028 0.2432 0.1028 4: 0.2772 0.2472 0.2772 0.2472 0.2772 0.2472 5: 0.2833 0.025 0.2833 0.025 6: 0.3194 0.2917 0.3194 0.2917 7: 0.407 0.3917 0.407 0.3917 8: 0.4507 0.4417 0.4507 0.4417 9: 0.5023 0.4472 0.5023 0.4472 10: 0.5064 0.4639 11: 0.5183 0.5028 12: 0.5414 0.5194 13: 0.5527 0.5305
答案 2 :(得分:0)
这是不可能的。 data.frame是一种列表,其中列表的所有元素都作为列粘在一起,并且必须具有相同的长度。更多信息 R dataframe with varied column lengths