Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只有部分列匹配时如何rbind_R - Fatal编程技术网

只有部分列匹配时如何rbind

只有部分列匹配时如何rbind,r,R,我有大约18个数据帧,基本上是列名称中存储的元素的频率计数。它们在Rptnames列中都有一些不同和相同的元素,所以它们看起来像这样 名为GroupedTableProportiondelAll的数据帧 Rptname freq bob 4324234 jane 433 ham 4324 tim 22 dataframe called GroupedTableProportiondelLUAD Rptname fre

我有大约18个数据帧,基本上是列名称中存储的元素的频率计数。它们在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)

GroupedTableProportiondelAll\T在添加列以标识data.frame之后,可以首先
rbind
数据帧。然后使用
restrape2
软件包中的
dcast
功能

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
rpt1
##Rptname频率df
##1 bob 4324234 rpt1
##2简433 rpt1
##3火腿4324 rpt1
##4 tim 22 rpt1
rpt2
##Rptname频率df
##1 bob 987 rpt2
##2简223 rpt2
##3 jonny 12 rpt2
##4吉姆98092 rpt2

rpt1$df一种替代
rbind
+
dcast
技术的方法,可以使用tidyverse

使用管道(
%%>%%
)首先使用
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
代码:

更新: 自2013年9月2019日tidyr 1.0.0发布之日起,
spread()
gather()
已失效,并分别被
pivot\u Wither()
pivot\u longer()
取代。Hadley Wickem表示,“
spread()
gather()
不会消失,但它们已经退役,这意味着它们不再处于积极开发中。”

为了获得与上述相同的输出,您现在需要首先按Rptname排列()
,然后使用
pivot\u wider()
。如果不先排列,将获得类似的输出,但列顺序将与
spread()
的输出不同

GroupTable%
排列(Rptname)%>%
枢轴(名称从=Rptname,值从=freq)

您应该将数据保留为长格式。这意味着您应该使用data.frame ID和
rbind向每个data.frame添加一列。如果您坚持使用宽格式,您可以在以后使用Reformae2包中的
dcast
,尽管这通常会使数据更难处理。因此,换句话说,我应该合并?这会用零填充空值吗?我在哪里提到了
merge
?我想你可以用它…因为他们有很多数据帧,他们应该把它们放在一个列表中,然后做一些类似于
DFlist的事情
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
GroupTable <- bind_rows(GTP_A, GTP_LUAD, .id = "df") %>%
  arrange(Rptname) %>% 
  pivot_wider(names_from = Rptname, values_from = freq)