我正在尝试通过ID将6个以上的数据集合并为一个。现在,ID的重复使得合并将每个ID视为新的观察。
示例代码:
combined <-Reduce(function(x,y) merge(x,y, all=TRUE), list(NRa,NRb,NRc,NRd,NRe,NRf,NRg,NRh))
这给了我这个:
ID Segment.h Segment.g Segment.f Segment.e Segment.d Segment.c
1 62729107 NA NA NA NA NA 1
2 62734839 NA 1 NA NA 1 NA
3 62734839 NA NA NA 1 NA NA
4 62737229 NA 1 NA NA NA NA
5 62737229 NA NA NA 1 1 NA
我希望每个ID都有一行:
ID Segment.h Segment.g Segment.f Segment.e Segment.d Segment.c
1 62729107 NA NA NA NA NA 1
2 62734839 NA 1 NA 1 1 NA
3 62737229 NA 1 NA 1 1 NA
感谢任何帮助。谢谢。
答案 0 :(得分:1)
使用R的sqldf包可以让你每行只有一个id。
Data1 <- data.frame(
X = sample(1:10),
Housing = sample(c("yes", "no"), 10, replace = TRUE)
)
Data2 <- data.frame(
X = sample(1:10),
Credit = sample(c("yes", "no"), 10, replace = TRUE)
)
Data3 <- data.frame(
X = sample(1:10),
OwnsCar = sample(c("yes", "no"), 10, replace = TRUE)
)
Data4 <- data.frame(
X = sample(1:10),
CollegeGrad = sample(c("yes", "no"), 10, replace = TRUE)
)
library(sqldf)
sqldf("Select Data1.X,Data1.Housing,Data2.Credit,Data3.OwnsCar,Data4.CollegeGrad from Data1
inner join Data2 on Data1.X = Data2.X
inner join Data3 on Data1.X = Data3.X
inner join Data4 on Data1.X = Data4.X
")
答案 1 :(得分:0)
为什么不在by='ID'
函数中尝试merge()
。如果这还不够,请尝试aggregate()
。
答案 2 :(得分:0)
您对问题的描述并不完全清楚,并且您无法提供数据。
假设您的所有数据框具有相同的维度,列名称,列顺序,ID条目,ID行顺序匹配,该ID是第一列,所有其他条目都是NA或1以及任何单元格在一个具有1的数据帧中,对于所有其他数据帧,该单元格中的NA值或者数值的总和是可接受的,并且您希望将结果作为数据帧...
使用abind包的老派解决方案:
consolidate <- function(lst) {
stopifnot(require(abind))
## form 3D array, replace NA
x <- abind(lst, along=3)
x[is.na(x)] <- 0
z <- x[,,1] ## data store
## sum array along 3rd dimension
for (j in seq(2,ncol(x)))
for (i in seq(nrow(x)))
z[i,j] <- sum(x[i,j,])
z[z==0] <- NA ## restore NA
as.data.frame(z)
}
对于数据框(具有上述警告)a,b,c:
consolidate(list(a,b,c))