【问题标题】:Plyr based on which.min for hole data.frame with colwise not workingPlyr 基于 which.min 用于孔 data.frame 与 colwise 不工作
【发布时间】:2017-08-04 05:39:20
【问题描述】:

您好,我有一个列表 re,其中的元素包含具有 colnames 的数据帧:c(values, diff, Sample1, Sample2, Sample3,...) 直到 Sample 100-1000。

“values”列没有唯一值,diff 列表示与另一个向量(不包含在 data.frames 中)的差异。

我得到的前两列很典型:

values<- c(1,1,2,2,3,4,4,4)
diff  <- c(1,2,1,2,1,2,2,1)

现在我想(对于列表中的每个数据帧)减少数据集,只有一个唯一的 values 元素在 diff 中具有最小值。所以在大写中: 值=c(1,2,3,4) 差异

我试过 plyr:

for (k in 1:length(re)) {
    ret[[k]] <- ddply(re[[k]], .(valueData), summarise, re[[k]][which.min(diff),]) }

给出错误:

Error in vector(type, length) : 
  vector: cannot make a vector of mode 'closure'.

因为我在 data.frames 中不仅有“值”和“差异”列,而且还有更多不同大小的列,所以我不能只命名每一列:

ret[[k]] <- ddply(re[[k]], .(valueData), summarise, diff=min(diff), 
                      Sample1=Sample1[which.min(diff)],Sample2=Sample2[which.min(diff)],Samplex...)

那么我该如何解决这个问题,或者尽管 plyr 还有其他选择?

有什么想法吗? 非常感谢!!!

【问题讨论】:

    标签: r plyr


    【解决方案1】:

    试试这个:

    lapply(re,function(df){
      df <- df[order(df$values,df$diff),]
      df[!duplicated(df$values),]
    })
    

    只需按升序对数据框进行排序,然后在values 列中选择第一个唯一值。

    【讨论】:

    • 谢谢!我会尽快试试这个。但是 plyr 就没有直接的方法吗?
    • ret[[k]] &lt;- ddply(ret[[k]], .(values),function(df)df[which.min(df$diff),] ) 会做到的。 summarise 表示添加新列,此处不需要。
    猜你喜欢
    • 2017-01-25
    • 2014-11-17
    • 2011-12-04
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2019-10-05
    • 1970-01-01
    相关资源
    最近更新 更多