将多个data.frames合并为一个(保留每个行名)

将多个data.frames合并为一个(保留每个行名),r,R,我输入了数据帧Berry和Orange Berry = structure(list(Name = c("ACT", "ACTION", "ACTIVISM", "ACTS", "ADDICTION", "ADVANCE"), freq = c(2L, 2L, 1L, 1L, 1L, 1L)), .Names = c("Name", "freq"), row.names = c(NA, 6L), class = "data.frame") Orange = structure(list(N

我输入了数据帧
Berry
Orange

Berry = structure(list(Name = c("ACT", "ACTION", "ACTIVISM", "ACTS", 
"ADDICTION", "ADVANCE"), freq = c(2L, 2L, 1L, 1L, 1L, 1L)), .Names = c("Name", 
"freq"), row.names = c(NA, 6L), class = "data.frame")

Orange = structure(list(Name = c("ACHIEVE", "ACROSS", "ACT", "ACTION", 
"ADVANCE", "ADVANCING"), freq = c(1L, 3L, 1L, 1L, 1L, 1L)), .Names = c("Name", 
"freq"), row.names = c(NA, 6L), class = "data.frame")
运行以下操作将获得所需的
输出

output = t(merge(Berry,Orange, by = "Name", all = TRUE))
rownames(output) = c("","Berry","Orange")
colnames(output) = output[1,]
output = output[2:3,]
output = data.frame(output)
但是,现在我必须从72个数据帧创建
输出
,类似于
Berry
Orange
。由于
merge
似乎一次只能处理两个
data.frame
,因此我不确定什么是最适合我的方法。我尝试了
rbind.fill
,它保留了值,但丢失了
名称
。我找到了,但我自己无法找到解决方案

这里还有一个
data.frame
,以提供一个可复制的示例

Apple = structure(list(Name = c("ABIDING", "ABLE", "ABROAD", "ACROSS", 
"ACT", "ADVANTAGE"), freq = c(1L, 1L, 1L, 4L, 2L, 1L)), .Names = c("Name", 
"freq"), row.names = c(NA, 6L), class = "data.frame")
我正在试图弄清楚如何从苹果、贝瑞和橙色中获得
输出。我正在寻找一个解决方案,将工作多个数据帧,最好不用我手动提供数据帧

您可以假设要处理以获取
输出的data.frame名称在列表
df_names
中可用:

 df_names = c("Apple","Berry","Orange")

或者,您也可以假设需要处理
全局环境中的每个
data.frame
,以创建
输出

如果您的所有数据帧都在一个环境中,您可以将它们放入一个命名列表中,然后使用包整形2来整形列表。如果需要,可以将第一列设置为行名称

library(reshape2)
dcast(melt(Filter(is.data.frame, mget(ls()))), L1 ~ Name)
#       L1 ABIDING ABLE ABROAD ACHIEVE ACROSS ACT ACTION ACTIVISM ACTS ADDICTION ADVANCE ADVANCING ADVANTAGE
# 1  Apple       1    1      1      NA      4   2     NA       NA   NA        NA      NA        NA         1
# 2  Berry      NA   NA     NA      NA     NA   2      2        1    1         1       1        NA        NA
# 3 Orange      NA   NA     NA       1      3   1      1       NA   NA        NA       1         1        NA

注意:这假设您的所有数据都在全局环境中,并且除了此处要使用的数据帧之外,不存在其他数据帧。

我们可以使用
tidyverse

library(dplyr)
library(tidyr)
list(Apple = Apple, Orange = Orange, Berry = Berry)  %>%
          bind_rows(.id = "objName") %>% 
          spread(Name, freq, fill = 0) 
#    objName ABIDING ABLE ABROAD ACHIEVE ACROSS ACT ACTION ACTIVISM ACTS ADDICTION ADVANCE ADVANCING ADVANTAGE
#1   Apple       1    1      1       0      4   2      0        0    0         0       0         0         1
#2   Berry       0    0      0       0      0   2      2        1    1         1       1         0         0
#3  Orange       0    0      0       1      3   1      1        0    0         0       1         1         0

由于您有72个data.frames,因此最好不要在全局环境中创建所有这些对象。而是读取
列表中的数据集文件
,然后进行处理。假设,如果文件都在工作目录中

files <- list.files(pattern = ".csv")
lapply(files, read.csv, stringsAsFactors=FALSE) 

文件您可以创建数据帧列表并使用lappy吗?