假设我有以下Dataframe。我需要计算18岁以下年龄的百分比,按ID和组分组。 我需要的是例如 1 a 50%或3 a 0% 我可以分两步计算所有并计算18岁以下,然后合并这两个框架,但我想知道我是否可以一步完成。
a <- group_by(ID, Group ) %>% summarize(countAllData = n())
b <- group_by(ID, Group ) %>% filter(lebensalter < 18) %>% summarize(countUnder18 = n())
merge(a, b, by=c("ID", "Group"), all=TRUE)
final[is.na(final)] <- 0
percentageUnder18 = ((final$countUnder18/final$countAllData) * 100)
cbind(final, roundedPercentage)
有什么建议吗?
ID Group Age
1 a 20
1 a 17
1 b 16
2 c 23
2 c 11
2 d 12
3 e 20
答案 0 :(得分:1)
您可以使用inttypes.h
,即
aggregate
给出,
aggregate(Age ~ ID+Group, df, FUN = function(i) sum(i < 18)/length(i))
答案 1 :(得分:1)
取指标变量Age < 18
的平均值。最后一行是可选的,但是如果你使用它,这个例子中的输出看起来会好一些。
library(dplyr)
DF %>%
group_by(ID, Group) %>%
summarize("%Under18" = round(100 * mean(Age < 18))) %>%
ungroup %>%
as.data.frame
,并提供:
ID Group %Under18
1 1 a 50
2 1 b 100
3 2 c 50
4 2 d 100
5 3 e 0
可重复输入的输入:
Lines <- "
ID Group Age
1 a 20
1 a 17
1 b 16
2 c 23
2 c 11
2 d 12
3 e 20"
DF <- read.table(text = Lines, header = TRUE)