R 具有ddply函数的频率表
以下是第一个问题的答案:R 具有ddply函数的频率表,r,algorithm,R,Algorithm,以下是第一个问题的答案: ddply(df,.(ID),summarise,N=sum(!is.na(ID)),frequency=length(event)) ID N Number-event-level levels frequency R1 1 1 a a=1 R2 5 2 b,c b=3,c=2 R3 6 3
ddply(df,.(ID),summarise,N=sum(!is.na(ID)),frequency=length(event))
ID N Number-event-level levels frequency
R1 1 1 a a=1
R2 5 2 b,c b=3,c=2
R3 6 3 M,a,s M=1,a=3,s=2
R4 4 4 f,y,b,a f=1,y=1,b=1,a=1
R5 1 1 m m=1
R6 1 1 a a=1
对于您的第二个问题,似乎您希望在频率大于0时获得平均频率。如果是这种情况,您可以这样做:
ddply(df,.(ID),summarise,
N=length(event),
Number.event.level=length(unique(event)),
levels=paste(sort(unique(event)),collapse=","),
frequency=paste(paste(sort(unique(event)),table(event)[table(event)>0],sep="="),collapse=","))
# ID N Number.event.level levels frequency
# 1 R1 1 1 a a=1
# 2 R2 5 2 b,c b=3,c=2
# 3 R3 6 3 a,M,s a=3,M=1,s=2
# 4 R4 4 4 a,b,f,y a=1,b=1,f=1,y=1
# 5 R5 1 1 m m=1
# 6 R6 1 1 a a=1
更新
如果要为第三个变量的每个级别执行最后一部分,并且仍然要使用ddply()
可以执行以下操作:
apply(table(df),2,function(x) mean(x[x>0]))
# a b c f m M s y
# 1.5 2.0 2.0 1.0 1.0 1.0 2.0 1.0
df1您试过了吗:ftable(df)
非常感谢您的帮助。太好了,非常感谢。我还有一个问题。如果我有三个分类变量,我如何修改您的解决方案(第二部分)。我想计算第三个变量的每个级别的事件平均值(总和(事件)/ID数)。我的意思是,我想为第三个变量的每个级别计算apply(表(df$ID,df$event),2,函数(x)mean(x[x>0])。@Sam Dickson,非常感谢您的时间和好意。在数据集上运行此函数时,出现以下错误:列表到数据帧(res,attr(.data,“split_labels”),.id,id_as_factor)中的错误:结果的长度不相等。关于解决此问题,有什么建议吗?最简单的解决方案是将事件
作为一个因素:df1$event很棒,非常感谢
apply(table(df),2,function(x) mean(x[x>0]))
# a b c f m M s y
# 1.5 2.0 2.0 1.0 1.0 1.0 2.0 1.0
df1 <- rbind(df,df)
df1$cat <- rep(c("a","b"),each=nrow(df))
ddply(df1,.(cat),function(y) apply(table(y),2,function(x) mean(x[x>0])))
# cat a b c f m M s y
# 1 a 1.5 2 2 1 1 1 2 1
# 2 b 1.5 2 2 1 1 1 2 1