Сумма строк с конкретными критериями в г - PullRequest
0 голосов
/ 25 июня 2018

У меня есть данные как

               function  person
1                hr       1
2                sls      5
3                mktg     3
4                qlt      7
5                rev      5

Я хочу создать строку с суммой значений в столбце "function", как "sls" и "mktg", используя r программирование

желательновывод:

            Person     function
1             1         hr
2             8         sls & mktg
3             7         qlt
4             5         rev 

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Базовое решение R:

merg <- c("sls", "mktg")
dat$func[dat$func %in% merg] <- paste(merg, collapse = " & ")
aggregate(person ~ func, dat, sum)
        func person
1         hr      1
2        qlt      7
3        rev      5
4 sls & mktg      8

Данные

dat <- data.frame(
  func = c("hr", "sls", "mktg", "qlt", "rev"), 
  person = c(1, 5, 3, 7, 5),
  stringsAsFactors = FALSE
)

Обратите внимание, что предполагается, что dat$func является символом ... если он не был сначала преобразован в символ с as.character()

0 голосов
/ 25 июня 2018

Другой подход с dplyr:

Код:
dfr %>%
  group_by(Function = sub("sls|mktg", "sls & mktg", functn)) %>%
  summarise(Person = sum(person))
Выход:
# A tibble: 4 x 2
  Function    Person
  <chr>       <dbl>
1 hr             1.
2 qlt            7.
3 rev            5.
4 sls & mktg     8.
Данные

tringsAsFactors = TRUE|FALSE - работает в обоих случаях.

dfr <- data.frame(
  functn   = c("hr", "sls", "mktg", "qlt", "rev"), 
  person   = c(1, 5, 3, 7, 5)                    
)
0 голосов
/ 25 июня 2018
library(dplyr)

dat <- data.frame(func = c("hr", "sls", "mktg", "qlt", "rev"), 
                  person = c(1, 5, 3, 7, 5))

dat %>%
  mutate(func = func %>% as.factor() %>% as.character(), 
         func = ifelse(func %in% c("sls", "mktg"), "sls & mktg", func)) %>%
  group_by(func) %>%
  summarize(Person = sum(person))

возвращает

# A tibble: 4 x 2
  func       Person
  <chr>       <dbl>
1 hr              1
2 qlt             7
3 rev             5
4 sls & mktg      8
...