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

时间:2018-06-25 13:38:00

标签: r dataframe data-science data-manipulation

我的数据为

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

我想使用r编程在“函数”列中将值之和制成“ sls”和“ mktg”行

所需的输出是:

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

3 个答案:

答案 0 :(得分:3)

基本的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()转换为字符

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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