r - Left_join 使用来自第二个数据帧的数据值填充 NA 条目
问题描述
我有两个相当复杂的 data.frames 并设法在这里简化了我的问题的第一步。我有一个参考表和另一个包含我的数据的表,如下所示:
参考
ref <- structure(list(group = c("A", "B", "C"), position = c("a", "a",
"b")), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
数据
df <- structure(list(position = c("a", "a"), value = c(1, 1, 2), name = c("foo",
"bar")), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"))
我曾经left_join(ref,df,by="position") %>% arrange(name)
获得:
1 A a 1 foo 2 A a 1 bar 3 B a 1 foo 4 B a 1 bar 5 C b NA NA
然而,理想的输出是:
group position value name <chr> <chr> <dbl> <chr> 1 A a 1 bar 2 B a 1 bar 3 C b 0 bar 4 A a 1 foo 5 B a 1 foo 6 C b 0 foo
我希望名称列用 df 的输入替换 NA,并将值列的 NA 替换为 0。在真正的 df 中,我在名称列中有多个 foo
解决方案
我们可以使用crossing
来获取组合,然后replace
将 'value' 列的值设置为 0,其中 'position' 列不相等
library(dplyr)
library(tidyr)
crossing(ref, df %>%
rename(position2 = position)) %>%
arrange(name) %>%
mutate(value = replace(value, position != position2 , 0)) %>%
select(-position2)
# A tibble: 6 x 4
# group position value name
# <chr> <chr> <dbl> <chr>
#1 A a 1 bar
#2 B a 1 bar
#3 C b 0 bar
#4 A a 1 foo
#5 B a 1 foo
#6 C b 0 foo
推荐阅读
- r - FB-Prophet 在 R 中获得变化点:m$changepoints.t 代表什么?
- c++ - 来自 WinHttpQueryHeaders 的 ERROR_WINHTTP_INCORRECT_HANDLE_STATE
- kubernetes - 尽管我的用户/角色 ARN 不是 aws-auth CM 的一部分,但我如何能够访问 EKS 集群?
- python - Altair 以 svg 格式导出时是否支持工具提示?
- amazon-web-services - Amazon Cognito:在使用 OIDC 身份提供商时添加自定义参数以授权 URL
- sql - 当查询包含空值时,如何在 postgres 上使用默认值
- capacitor - Capacitor 使用什么浏览器引擎
- javascript - 无法在 Next.js App 中编写 JQuery 代码
- jenkins - Jenkins 配置矩阵触发多个作业
- excel - 带有凭据的 Excel Web 查询,错误提示 (404) 未找到