对 r 中具有特定条件的行求和

Sum rows with specific criteria in r

我的数据为

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

我想使用 r programing

将 "function" 列中的值的总和作为 "sls" 和 "mktg" 的行

期望的输出是:

            Person     function
1             1         hr
2             8         sls & mktg
3             7         qlt
4             5         rev 
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))

returns

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

基础 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()

转换为字符

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