Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 具有ddply函数的频率表_R_Algorithm - Fatal编程技术网

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