我有两个df。我只想将另一列中的值穿过两个dfs时,才将一个df中的列的值传输到另一df中的列。
第一个df如下:
A = data.frame(name = c('Ann', 'Charlie', 'James', 'Mary'),
count = c(0,0,0,0))
第二个df如下:
B = data.frame(name = c('Charlie', 'Mary'), count = (4, 11))
我想要的是将df A中的计数值更改为df B中的名称与A中的名称匹配的df B中的计数值:
新df A:
name count
Anne 0
Charlie 4
James 0
Mary 11
有没有办法使用dplyr?
答案 0 :(得分:2)
A %>%
rename(count_A = count) %>%
left_join(B %>% rename(count_B = count), by = 'name') %>%
mutate(count = ifelse(is.na(count_B), count_A, count_B))
答案 1 :(得分:1)
dplyr joins和coalesce函数应该可以解决问题:
library(dyplr)
A %>%
left_join(B, by = "name") %>%
mutate(count = coalesce(count.y, count.x)) %>%
select(-count.x, -count.y)
答案 2 :(得分:0)
您可以在此处完成此操作:
> dplyr::left_join(A, B, "name") %>%
rowwise() %>%
transmute(name, count = sum(count.x, count.y, na.rm = TRUE))
Source: local data frame [4 x 2]
Groups: <by row>
# A tibble: 4 x 2
name count
<chr> <dbl>
1 Anne 0
2 Charlie 4
3 James 0
4 Mary 11
或者,
> left_join(A, B, "name") %>%
transmute(name, count = rowSums(select(., starts_with("count")), na.rm = TRUE))
name count
1 Anne 0
2 Charlie 4
3 James 0
4 Mary 11
注意事项:我在某处(我不记得在哪里)读到第二种方法不受设计支持,但确实给出了正确的答案。