这可能是我的脑屁但我想要一些帮助。
我有一个数据框:
dftest <- data.frame(
"id" = c(rep("A",5),rep("B",5),rep("C",5)),
"time" = c(0,1,2,3,4,0,1,2,3,4,0,1,2,3,4),
"val" = c(1,2,2,2,2,1,2,2,2,2,2,1,1,1,1))
我正在尝试使用数据框每次查找val列等于2的次数除以当时的条目总数。
因此对于上述数据帧,对于时间= 0,对于id =“C”,val = 2,因此结果将是1/3,而对于时间1,对于id =“A”和id,val = 2 =“B”,结果是2/3。
如何在dplyr中执行此操作?
答案 0 :(得分:1)
您可以在布尔值(强制为0/1)上使用mean()
函数找到比例。例如
dftest %>% group_by(time) %>%
summarize(proptwo = mean(val==2))
# A tibble: 5 × 2
# time proptwo
# <dbl> <dbl>
# 1 0 0.3333333
# 2 1 0.6666667
# 3 2 0.6666667
# 4 3 0.6666667
# 5 4 0.6666667
答案 1 :(得分:1)
我可能会按照您的意愿选择不同的路线,但是:
plyr::ldply(dftest %>% split(., .[['time']]), function(i){
nrow(i %>% dplyr::filter(val == 2)) / nrow(i)
}) %>% select(time = 1, freq = 2)
time freq
1 0 0.3333333
2 1 0.6666667
3 2 0.6666667
4 3 0.6666667
5 4 0.6666667
答案 2 :(得分:0)
以下是使用aggregate
base R
的选项
aggregate(cbind(proptwo = val==2)~time, dftest, mean)
# time proptwo
#1 0 0.3333333
#2 1 0.6666667
#3 2 0.6666667
#4 3 0.6666667
#5 4 0.6666667