如何在R代码中将多个表或矩阵合并为一个
这是我的第一个问题,它与R库德有关 我的情况是,我有50个10X10数据帧。这些是不同日期的项目和计数。两个矩阵的简化示例:如何在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
> 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