【发布时间】:2013-10-21 12:15:55
【问题描述】:
假设我有 5 个列相同但行长不同的数据框。我想 制作 1 个数据框,该数据框从 5 个数据框中的每一个中获取特定列,以及 在没有长度匹配的情况下填充 NA(或其他)。我看过问题 在这里展示了如何使用一次性向量来做到这一点,但我正在寻找一种方法 用更大的数据集来做。
例如:2 个等长的数据帧:
long <- data.frame(accepted = rnorm(350, 2000), cost = rnorm(350,5000))
long2 <- data.frame(accepted = rnorm(350, 2000), cost = rnorm(350,5000))
我可以创建一个组合它们的列表,然后创建一个空数据框并填充 它与列表中数据框中的公共变量:
list1 <- list(long, long2)
df1 <- as.data.frame(matrix(0, ncol = 5, nrow = 350))
df1[,1:2] <- sapply(list, '[[', 'accepted')
而且它有效。
但是当我有更多长度不等的数据帧时,这种方法会失败:
long <- data.frame(accepted = rnorm(350, 2000), cost = rnorm(350,5000))
long2 <- data.frame(accepted = rnorm(350, 2000), cost = rnorm(350,5000))
medlong <- data.frame(accepted = rnorm(300, 2000), cost = rnorm(300,5000))
medshort <- data.frame(accepted = rnorm(150, 2000), cost = rnorm(150,5000))
short <- data.frame(accepted = rnorm(50, 2000), cost = rnorm(50,5000))
现在制作列表和组合数据框:
list2 <- list(long, long2, medlong, medshort, short)
df2 <- as.data.frame(matrix(0, ncol = 5, nrow = 350))
df1[,1:5] <- sapply(list, '[[', 'accepted')
我收到关于尺寸不匹配的错误:
[<-.data.frame(*tmp*, , , 1:5, value = c(1998.77096640377, : 替换有700件,需要1750
我发现用不相等的列填充此数据框的唯一解决方案 其他数据帧的长度大致如下:
combined.df <- as.data.frame(matrix(0, ncol = 5, nrow = 350))
combined.df[,1] <- long[,2]
combined.df[,2] <- c(medlong[,2], rep(NA, nrow(long) - nrow(medlong))
但是必须有一种更优雅、更快捷的方式来实现它……我知道我在这里遗漏了一些巨大的概念
【问题讨论】:
标签: r