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