объединить и суммировать столбцы вместе R - PullRequest
0 голосов
/ 16 января 2019

У меня к вам технический вопрос, плз:

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))

У вас есть идея, плз (может быть с суммированием, распространением, group_by)

Спасибо!

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Dplyr может сделать это довольно хорошо с помощью следующего кода.Строка позволяет рассматривать каждую строку отдельно.И команда mutate суммирует любые столбцы, которые вы хотите.na.rm = TRUE обрабатывает проблему, когда у вас есть NA и вы хотите их игнорировать.Как упоминалось в комментарии, если у вас его нет, он даст вам NA, если он находится в каком-либо из суммированных значений.

library(dplyr)
df %>% 
  rowwise() %>% 
  mutate(f_new = sum(f,f2, na.rm = TRUE))
0 голосов
/ 16 января 2019

Используя plyr и dplyr, вы можете сделать это:

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 значения

0 голосов
/ 16 января 2019

Вот ответ, используя tidyverse методы из dplyr и tidyr

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...