【问题标题】:split a data frame with plyr用 plyr 分割数据框
【发布时间】:2012-12-07 17:37:25
【问题描述】:

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

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

我能够使用以下代码轻松地根据每个“名称”的“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

【问题讨论】:

  • 你好,朱利安,你能提供some sample data吗? :)
  • 可能是ddply(z2, .(loghos, name), summarise, value = min(value,na.rm=T)),没有数据很难判断
  • ddply(z2, .(loghos,name), function(x) min(x$value,na.rm=T))ddply 传递给匿名函数的参数是一个data.frame。
  • ddply 将数据拆分成小块;您需要为其提供一个函数,该函数将块(data.frame)作为输入并返回一个data.frame。 summarise 就是这样一种功能,但min 本身不是。
  • 有人可以发布这些 cmets 之一(或合成它们)作为答案...(@jtextori,您可以发布自己问题的答案...)

标签: r split statistics dataframe plyr


【解决方案1】:

来自 cmets 的回答总结:

正如 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,因为它是输出变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多