join and sum columns together R
我有一个数据框:
1 2 3 4 | df <- data.frame(ca = c("a","b","a","c","b","b"), f = c(3,4,0,NA,3, 4), f2 = c(NA,5,6,1,9, 7), f3 = c(3,0,6,3,0, 8)) |
我想加入并总结我的列 "f" 和 "f2" 并将其重命名为 "f_news"
示例:
1 2 3 4 | df <- data.frame(ca = c("a","b","a","c","b","b"), f_new = c(3,9,6,1,12, 11), f3 = c(3,0,6,3,0, 8)) |
您知道如何使用 summarise、spread、group_by 来完成此操作吗?
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | df %>% rowwise() %>% mutate(f_new=sum(f, f2, na.rm = T)) # A tibble: 6 x 5 # ca f f2 f3 f_new # <fct> <dbl> <dbl> <dbl> <dbl> #1 a 3 NA 3 3 #2 b 4 5 0 9 #3 a 0 6 6 6 #4 c NA 1 3 1 #5 b 3 9 0 12 #6 b 4 7 8 11 |
此方法将保留和
Dplyr 可以通过以下代码很好地做到这一点。 Rowwise 允许您单独考虑每一行。 mutate 命令对您想要的任何列进行求和。当您有 NA 并想忽略它们时, na.rm=TRUE 会处理此问题。正如评论所提到的,如果你没有这个,如果它在任何总和值中,它会给你一个 NA。
1 2 3 4 | library(dplyr) df %>% rowwise() %>% mutate(f_new = sum(f,f2, na.rm = TRUE)) |
这是使用
中的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | library(tidyverse) df <- data.frame(ca = c("a","b","a","c","b","b"), f = c(3,4,0,NA,3, 4), f2 = c(NA,5,6,1,9, 7), f3 = c(3,0,6,3,0, 8)) df %>% replace_na(list(f = 0, f2 = 0)) %>% mutate(f_new = f + f2) #> ca f f2 f3 f_new #> 1 a 3 0 3 3 #> 2 b 4 5 0 9 #> 3 a 0 6 6 6 #> 4 c 0 1 3 1 #> 5 b 3 9 0 12 #> 6 b 4 7 8 11 |