gpt4 book ai didi

r - 如何使用 dplyr 或其他包合并两个数据帧?

转载 作者:行者123 更新时间:2023-12-02 01:44:29 30 4
gpt4 key购买 nike

我有两个数据框:

df1 = data.frame(index=c(0,3,4),n1=c(1,2,3))  
df1
# index n1
# 1 0 1
# 2 3 2
# 3 4 3

df2 = data.frame(index=c(1,2,3),n2=c(4,5,6))
df2
# index n2
# 1 1 4
# 2 2 5
# 3 3 6

我想加入这些:

  index n
1 0 1
2 1 4
3 2 5
4 3 8 (index 3 in two df, so add 2 and 6 in each df)
5 4 3
6 5 0 (index 5 not exists in either df, so set 0)
7 6 0 (index 6 not exists in either df, so set 0)

给定的数据框只是大型数据集的一部分。我可以使用 dplyr 或 R 中的其他包来实现吗?

最佳答案

使用 data.table(对于更大的数据集会很有效)。我没有更改列名,因为 rbindlist 使用第一个数据集的名称,即。在这种情况下,来自第二列的 n (不知道它是功能还是错误)。通过 rbindlist 加入数据集后,按 index 列对其进行分组,即 (by=index) 并计算 n< 的总和 列 (list(n=sum(n)) )

 library(data.table)
rbindlist(list(data.frame(index=0:6,n=0), df1,df2))[,list(n=sum(n)), by=index]
index n
#1: 0 1
#2: 1 4
#3: 2 5
#4: 3 8
#5: 4 3
#6: 5 0
#7: 6 0

或者使用dplyr。在这里,所有数据集的列名应该是相同的。因此,我在使用 rbind_list binding 数据集之前更改它。如果 names 不同,每个 name 将有多个列。加入数据集后,按 index 对其进行分组,然后使用 summarize 并对 n 列进行 sum

 library(dplyr)
nm1 <- c("index", "n")
colnames(df1) <- colnames(df2) <- nm1
rbind_list(df1,df2, data.frame(index=0:6, n=0)) %>%
group_by(index) %>%
summarise(n=sum(n))

关于r - 如何使用 dplyr 或其他包合并两个数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26520644/

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