如何在R代码中将多个表或矩阵合并为一个

如何在R代码中将多个表或矩阵合并为一个,r,merge,dataframe,R,Merge,Dataframe,这是我的第一个问题,它与R库德有关 我的情况是,我有50个10X10数据帧。这些是不同日期的项目和计数。两个矩阵的简化示例: > Day1 name count 1 Item1 231 2 Item2 222 3 Item3 453 > dim(Day1) [1] 3 2 > str(Day1) 'data.frame': 3 obs. of 2 variables: $ name : Factor w/ 3

这是我的第一个问题,它与R库德有关

我的情况是,我有50个10X10数据帧。这些是不同日期的项目和计数。两个矩阵的简化示例:

  > Day1
     name count
  1 Item1   231
  2 Item2   222
  3 Item3   453

  > dim(Day1)
  [1] 3 2

  > str(Day1)

  'data.frame': 3 obs. of  2 variables:
   $ name : Factor w/ 3 levels "Item1","Item2",..: 1 2 3
   $ count: num  231 222 453

  > Day2
   name count
  1 Item1   111
  2 Item4   765
  3 Item3   212
因此,合并应如下所示:

     > Total
     name  D1  D2
  1 Item1 231 111
  2 Item2 222   0
  3 Item3 453 212
  4 Item4   0 765
  >
因此,本质上,矩阵“我有,每个可能有或可能没有相同的项目名称为一天,但目标是让他们在一个矩阵/视图,他们看到项目计数上升/下降,等等。 [也欢迎提供绘图、图表等建议,以显示数据中的有用信息]

尝试:

library(plyr)
nm1 <- ls(pattern="^Day")
nm2 <- gsub("^(.).*(\\d)$", "\\1\\2", nm1)


res <- join_all(Map(function(x,y) {names(x)[2] <- y;x},
               mget(nm1), nm2), type="full")
res[is.na(res)] <- 0
res
#    Name  D1   D2
#1 Item1  231  111
#2 Item2  222   0
#3 Item3  453  212
#4 Item4   0   765
数据
你不需要一个包裹。使用akrun的数据:

datlist <- mget(ls(pattern="^Day"))

dat <- Reduce(function(DF1, DF2) merge(DF1, DF2, by = "Name", all=TRUE), datlist)
names(dat)[-1] <- names(datlist)
dat[,-1] <- lapply(dat[,-1], function(x) {
  x[is.na(x)] <- 0
  x
})
#   Name Day1 Day2
#1 Item1  231  111
#2 Item2  222    0
#3 Item3  453  212
#4 Item4    0  765
尝试:


请用R表示矩阵的精确形式,例如,将dputyourmatrix1的输出添加到问题中。现在还不清楚您的数据是哪种形式的。@Hasan Mahmud如果是data.frame,您可以执行'mergeDay1,Day2,by=name,all=TRUE'欢迎使用。但这是一个罕见的情况下,你会得到立即和良好的!答案是@Hasan Mahmud我想你对第3项和第4项的预期结果是
datlist <- mget(ls(pattern="^Day"))

dat <- Reduce(function(DF1, DF2) merge(DF1, DF2, by = "Name", all=TRUE), datlist)
names(dat)[-1] <- names(datlist)
dat[,-1] <- lapply(dat[,-1], function(x) {
  x[is.na(x)] <- 0
  x
})
#   Name Day1 Day2
#1 Item1  231  111
#2 Item2  222    0
#3 Item3  453  212
#4 Item4    0  765
dflist = list(Day1, Day2)
dflist
for(i in 1:length(dflist)) {
    dflist[[i]]$day = paste0('Day',i)

}
merged = dflist[[1]]
for(i in 2:length(dflist)){
    merged = rbind(merged, dflist[[i]])
}

merged
   Name Count  day
1 Item1   231 Day1
2 Item2   222 Day1
3 Item3   453 Day1
4 Item1   111 Day2
5 Item4   765 Day2
6 Item3   212 Day2

dcast(merged, Name~day, value.var="Count")
   Name Day1 Day2
1 Item1  231  111
2 Item2  222   NA
3 Item3  453  212
4 Item4   NA  765