gpt4 book ai didi

r - 合并两个具有不同行数和列数的数据框

转载 作者:行者123 更新时间:2023-12-05 02:58:33 24 4
gpt4 key购买 nike

我正在尝试将两个共享相同行/列名称但具有不同数量的列/行但正在努力的数据帧添加在一起。

创建数据框:

df1 = data_frame('Type' = 'Apple', '18/19' = 5)
df2 = data_frame('Type' = c('Apple', 'Pear', 'Banana'),
'16/17' = c(4,5,6), '17/18' = c(0,2,5), '18/19' = c(2,6,7))


df1:

Type    18/19
Apple 5


df2:

Type    16/17   17/18   18/19
Apple 4 0 2
Pear 5 2 6
Banana 6 5 7



我想要结束的是:

dfFinal:

Type    16/17   17/18   18/19
Apple 4 0 7
Pear 5 2 6
Banana 6 5 7

我试过:

dfFinal = merge(df1, df2, all=TRUE)

但这只会创建两个“Apple”行。

还有这个:

dfFinal = aggregate(.~Type,rbind(df1,setNames(df2,names(df1))),sum)

但这只会给我一个“参数列数不匹配”的错误

dfFinal = cbind(df1[1], df1[-1] + df2[-1])

给我一​​个错误“+ 只为同样大小的数据帧定义”

dfFinal = merge(data.frame(df1, row.names=NULL), data.frame(df2, row.names=NULL), 
by = 0, all = TRUE)[-1]

将“类型”列一分为二。



有什么建议么?这应该很容易,但我无法让它工作。

最佳答案

我猜是这样的?不知道要不要按照df2中的顺序来排序Type..

library(dplyr)
library(tibble)
merge(df1, df2, all=TRUE) %>% group_by(Type) %>% summarise_all(sum,na.rm=TRUE)
# A tibble: 3 x 4
Type `18/19` `16/17` `17/18`
<chr> <dbl> <dbl> <dbl>
1 Apple 7 4 0
2 Banana 7 6 5
3 Pear 6 5 2

如果需要,就必须去做

rowlvl <- df2$Type
collvl <- colnames(df2)
merge(df1, df2, all=TRUE) %>% select(collvl) %>% mutate(Type=factor(Type,levels=rowlvl)) %>%
group_by(Type) %>% summarise_all(sum,na.rm=TRUE)

# A tibble: 3 x 4
Type `16/17` `17/18` `18/19`
<fct> <dbl> <dbl> <dbl>
1 Apple 4 0 7
2 Pear 5 2 6
3 Banana 6 5 7

关于r - 合并两个具有不同行数和列数的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58913189/

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