gpt4 book ai didi

r - 向数据框添加唯一行(与相交相反)

转载 作者:行者123 更新时间:2023-12-04 10:57:49 25 4
gpt4 key购买 nike

我对 R 比较陌生,但慢慢找到了自己的方式。但是,我遇到了问题,希望有人可以帮助我。

假设我有两个数据框(我们称它们为 A 和 B),都包含调查响应。 A 包含来自第一组人的所有响应。 B 包含第二组人的回答,加上第一组人的回答,但他们的回答设置为 NA。一个例子:

Dataframe A:
Household Individual Answer_A Answer_b
1 2 5 6
1 3 6 6
2 1 2 3

Dataframe B:
Household Individual Answer_A Answer_b
1 1 3 6
1 2 NA NA
1 3 NA NA
2 1 NA NA
2 2 4 7

我想获得一个包含所有个人及其回复的数据框:
Dataframe C:
Household Individual Answer_A Answer_b
1 1 3 6
1 2 5 6
1 3 6 6
2 1 2 3
2 2 4 7

如果我只有两个数据集,我可以使用 rbind.fill , 与 rbind.fill(B, A)获取数据帧 C,因为 B 中的 NA 会被 A 中的答案覆盖。
但是...如果我必须添加第三个数据集 D,它由 A 和 B 中的人的 NA 组成,我将无法使用此解决方案。那时我能做什么?我看过intersect,outersect,不同形式的join,但似乎想不出一个好的解决方案。

有什么想法吗?

最佳答案

也许你可以left_join然后使用 coalesce

library(dplyr)

left_join(B, A, by = c("Household", "Individual")) %>%
mutate(Answer_A = coalesce(Answer_A.x, Answer_A.y),
Answer_B = coalesce(Answer_b.x, Answer_b.y)) %>%
select(-matches("\\.x|\\.y"))

# Household Individual Answer_A Answer_B
#1 1 1 3 6
#2 1 2 5 6
#3 1 3 6 6
#4 2 1 2 3
#5 2 2 4 7

数据
A <- structure(list(Household = c(1L, 1L, 2L), Individual = c(2L, 
3L, 1L), Answer_A = c(5L, 6L, 2L), Answer_b = c(6L, 6L, 3L)), class = "data.frame",
row.names = c(NA, -3L))

B <- structure(list(Household = c(1L, 1L, 1L, 2L, 2L), Individual = c(1L,
2L, 3L, 1L, 2L), Answer_A = c(3L, NA, NA, NA, 4L), Answer_b = c(6L,
NA, NA, NA, 7L)), class = "data.frame", row.names = c(NA, -5L))

关于r - 向数据框添加唯一行(与相交相反),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59070529/

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