当只有一些列匹配时如何rbind

时间:2015-04-02 07:21:22

标签: r

我有大约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个问题,但核心问题是相同的 - 当不是所有的行或列匹配时如何绑定

2 个答案:

答案 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