我有大约18个数据帧,这些数据帧基本上是存储在Rptnames列中的元素的频率计数。它们在Rptnames列中都有一些不同的和一些相同的元素,所以它们看起来像这样
数据框称为GroupedTableProportiondelAll
Rptname freq
bob 4324234
jane 433
ham 4324
tim 22
dataframe called GroupedTableProportiondelLUAD
Rptname freq
bob 987
jane 223
jonny 12
jim 98092
我正在尝试设置一个表,以便Rptname成为列,每行都是频率。这样我就可以组合所有数据帧。
我试过以下
GroupedTableProportiondelAll_T <- as.data.frame(t(GroupedTableProportiondelAll))
GroupedTableProportiondelLUAD_T <- as.data.frame(t(GroupedTableProportiondelLUAD))
total <- rbind(GroupedTableProportiondelLUAD_T, GroupedTableProportiondelAll_T)
但是我得到了错误 rbind中的错误(deparse.level,...): 参数列数不匹配
所以问题是
a)我怎么能做rbind(cbind也可以不用我想的转置)这样就可以在不需要匹配的情况下进行绑定。
b)在这里合并会更好
c)在任何一种方法中都有一种方法可以为空值输入零
d)P&#39; raps那里有更好的方法来做这个我不熟悉的矩阵吗?我知道它的4个问题,但核心问题是相同的 - 当不是所有的行或列匹配时如何绑定
答案 0 :(得分:4)
添加列以识别data.frame后,您可以先rbind
数据帧。然后使用dcast
包中的reshape2
函数。
rpt1
## Rptname freq df
## 1 bob 4324234 rpt1
## 2 jane 433 rpt1
## 3 ham 4324 rpt1
## 4 tim 22 rpt1
rpt2
## Rptname freq df
## 1 bob 987 rpt2
## 2 jane 223 rpt2
## 3 jonny 12 rpt2
## 4 jim 98092 rpt2
rpt1$df <- "rpt1"
rpt2$df <- "rpt2"
rpt <- rbind(rpt1, rpt2)
dcast(data = rpt, df ~ Rptname, value.var = "freq")
## df bob ham jane tim jim jonny
## 1 rpt1 4324234 4324 433 22 NA NA
## 2 rpt2 987 NA 223 NA 98092 12
答案 1 :(得分:2)
使用{tidyverse}的rbind
+ dcast
技术的替代方法。
使用管道(%>%
)首先使用bind_rows()
将所有数据框绑定在一起,同时创建一个数据框id列(在本例中,我只是将其称为“ df”变量)。然后使用spread()
移动唯一的“ Rptname”值成为列名,并将“ freq”的值分布在新列中。在这种情况下,“ Rptname”是键,“ freq”是值。
它看起来像这样:
GTP_A
Rptname freq
1 bob 4324234
2 jane 433
3 ham 4324
4 tim 22
GTP_LUAD
Rptname freq
1 bob 987
2 jane 223
3 jonny 12
4 jim 98092
GroupTable <- bind_rows(GTP_A,GTP_LUAD, .id = "df") %>%
spread(Rptname, freq)
GroupTable
df bob ham jane jim jonny tim
1 1 4324234 4324 433 NA NA 22
2 2 987 NA 223 98092 12 NA