1

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

我准备了一个与 ggplot2 一起使用的数据框(z2)。该数据框包含一个带有实数的“值”列,一个标识测试参数的“名称”列,一个作为每个人的唯一 ID 的“loghos”列,以及一个作为结果变量的“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

我敢肯定这没什么大不了的,但我找不到如何正确写 i !

提前致谢,

朱利安

编辑:下面提供了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
4

1 回答 1

1

评论中的答案摘要:

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

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

x = ddply(z2, .(loghos, name, statut), summarise, value = min(value,na.rm=T))

在这个函数中,只有loghosnamevalue使用,因为statut is unique for eachloghos . I added it to the list to keep its value in thex` data.frame,因为它是输出变量。

于 2012-12-21T06:10:22.713 回答