我的数据为
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
答案 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)
)