用plyr拆分数据框

时间:2012-12-20 08:39:06

标签: r split statistics dataframe plyr

我在这个主题上找到了几个问题/答案,但是我无法解决我的问题...所以我会问我的方式。对不起,如果很明显。

我准备了一个与ggplot2一起使用的数据帧(z2)。此数据框包含带有实数的列“值”,用于标识测试参数的列“名称”,用于每个个体的唯一ID列“loghos”,以及作为结果变量的列“statut”。 p>

我可以使用以下代码轻松地根据每个“名称”的“statut”绘制“值”:

pt <- ggplot(z2, aes(y = value, x = statut))
pt + geom_boxplot(aes(colour=statut)) + facet_wrap(~name, scales="free_y")

在数据框中,我为每个“loghos”(不同时间点的几个样本)重复了每个“名称”的值。

我想只绘制每个'名字'和每个'病人'的最小值。所以我尝试使用plyr,我写道:

x = ddply(z2, .(loghos,name), function(x) return(min(x,na.rm=T)))

然而,我收到此错误消息,现在我不知道该怎么办?

Erreur dans FUN(X[[1L]], ...) : 
  only defined on a data frame with all numeric variables

我确定这没什么大不了的,但是我找不到如何正确地写作!

提前致谢,

于连

编辑:data.frame的样本在下面提供

y = z2[sample(nrow(z2),20),c(1,2,3,9,11,12,13)]
y
      cleBilan   name  value   loghos sexe age    statut
80612   328347   plaq 384.00 31218139    M  21 transfert
36304   363835     gb   5.62 41416171    M  72   service
59346   267744 lympho   9.90 30628552    F  22   service
62746   388270 lympho   8.70 41620223    M  78   service
81046   342228   plaq 185.00 41120284    M  19   service
67400   323055   mono   3.10 31273421    F  45   service
35572   335928     gb  16.16 41178061    F  22 transfert
71136   256960 neutro  10.65 30401746    M  71 transfert
34324   293368     gb  16.20 30894579    F  30   service
69010   383939   mono   6.90 41574890    M  22   service
63665   236360   mono   4.40 29970714    M  71   service
31366   233999     gb   7.20 29959612    F  18   service
60867   317932 lympho  12.00 31229099    M  50   service
74487   355581 neutro  10.68 41154330    F  23   service
65520   265864   mono   7.00 30583193    M  78   service
36553   375590     gb   7.10 41489078    M  61   service
65849   268730   mono   3.90 30652360    M  89     deces
80813   354964   plaq 404.00 41120284    M  19   service
31271   232524     gb   6.30 29934806    M  36   service
72789   291335 neutro  11.00 30923095    F  35   service

1 个答案:

答案 0 :(得分:1)

回答评论摘要:

正如baptiste所评论的那样:“ddply将数据拆分成小块;你需要为它提供一个以块(data.frame)作为输入并返回data.frame的函数。{{1是一个这样的函数,但summarise本身不是“。

所以要减少初始data.frame,正确的代码是:

min

在此函数中,仅使用x = ddply(z2, .(loghos, name, statut), summarise, value = min(value,na.rm=T)) loghosname,因为value loghos statut is unique for each x` data.frame,因为它是输出变量