簡體   English   中英

將列連接在一起並求和 R

[英]join and sum columns together R

我有一個數據框:

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”中重命名

例子:

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 來做到這一點?

這是使用dplyrtidyr tidyverse方法的答案

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

Dplyr 可以用以下代碼很好地做到這一點。 Rowwise 允許您單獨考慮每一行。 mutate 命令對您想要的任何列求和。 當您有 NA 並想忽略它們時, na.rm=TRUE 會處理該問題。 正如評論中提到的,如果你沒有這個,如果它在任何一個總和值中,它會給你一個 NA。

library(dplyr)
df %>% 
  rowwise() %>% 
  mutate(f_new = sum(f,f2, na.rm = TRUE))

使用plyrdplyr你可以這樣做:

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

此方法將保留和NA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM