gpt4 book ai didi

r - 将多个 data.frame 合并为一个(保留每个行名称)

转载 作者:行者123 更新时间:2023-12-02 09:22:03 25 4
gpt4 key购买 nike

我有输入数据帧BerryOrange

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)

但是,现在我必须从类似于 BerryOrange72 数据帧创建 output。由于 merge 似乎一次只能处理两个 data.frame,因此我不确定对我来说最好的方法是什么。我尝试了 rbind.fill,它保留了值,但丢失了名称。我发现thisthis但我自己无法找到解决方案。

这里还有一个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")

我正在尝试弄清楚如何从 AppleBerryOrange 获取输出。我正在寻找一种适用于多个数据帧的解决方案,最好不需要我手动提供数据帧。

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

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

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

最佳答案

如果您在环境中拥有所有数据框,则可以将它们放入命名列表中,然后使用包reshape2来 reshape 列表。如果需要,您可以将第一列设置为行名称。

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

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

关于r - 将多个 data.frame 合并为一个(保留每个行名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41795975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com