【发布时间】:2021-01-19 16:36:06
【问题描述】:
我有两个数据框,我们称它们为 A 和 B。数据框 A 包含 5000 行有关英国不同地区人口的信息。类似的东西:
rowname geographyID age_bucket income population
1 E0100056 0-18 6000 567
2 E0100056 19-64 28000 2437
3 E0100056 65+ 26000 789
4 E0100082 0-18 6400 481
. . . . .
因此,在位置 E0100056 有 789 名 65 岁以上的人,他们的平均年收入为 26000 英镑。 geographyID 和 age_bucket 存储为字符,而收入和人口是数字。
这些位置的一个子集现在有新的人口估计,这是存储在数据框 B 中的信息:
rowname geographyID age_bucket population
1 E0100056 0-18 489
2 E0100056 19-64 2743
3 E0100056 65+ 882
. . . .
B中只有geographyID-age_bucket组合的数据发生变化,所以只有80行。
我需要做的是用 B 中的新数字更新 A 中的人口数字。为此,我尝试在两个数据帧中创建一个“geographyID:age_bucket”索引,并使用它在 B 中找到正确的信息,同时改变 A:
A$index <- with(A, paste(geographyID, age_bucket, sep=":"))
B$index <- with(B, paste(geographyID, age_bucket, sep=":"))
indicies_to_update <- B %>% pull("index")
A <- A %>%
mutate(
population = ifelse(index %in% indicies_to_update, B[which(grepl(index, B$index)),which(colnames(B) == "population")] , population)
)
不幸的是,这不起作用,因为 grepl() 函数会引发错误(我认为这与 mutate 将索引作为向量传递有关)。我是 R 的完整初学者,对如何解决这个问题一无所知。 非常欢迎您提供帮助 - 提前感谢您!
PS:更复杂的是 A 表包含一些不正确的 geographyID:age_bucket 组合重复(它不应该,但由于本文范围之外的原因,我现在无法调整它)。因此,我正在寻找一种可以更新所有相关行的解决方案。
【问题讨论】:
-
你用的是左连接还是右连接?