Plyr基于which.min for hole data.frame,colwise不工作

时间:2017-03-14 02:09:51

标签: r plyr

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

列“值”没有唯一值,列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) 的diff&LT; -C(1,1,1,1)

我试过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中有“values”和“diff”列,而且还有更多的差异大小我不能只为每一列命名:

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

那么我怎么能解决这个问题呢?或者plyr还有其他选择吗?

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

1 个答案:

答案 0 :(得分:1)

试试这个:

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

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