ddplyr将旧数据框中的char变量放入基于条件

时间:2017-04-08 02:07:06

标签: r char plyr

我是初学者。我已经查看了大约10个与ddplyr相关的问题,但大多数情况下我并不了解它们。我无法根据条件将旧数据帧中的字符变量传输到新数据框中。这样,即使我只有一个主要条件,我必须为每个数字变量制定单独的条件,以使其进入新的df。除了字符变量之外,下面的代码对我有用。

  Newdata<-ddply(Olddata, ~ ID,summarize, Num1= min(Num1),Num2=max(Num2),
               Num3=min(Num3),Num4=min(Num4))

数据

enter image description here

我的主要条件是Num1 = min(Num1),如果我能得到Num3,4和char,那就太棒了。并且我将添加另一个条件Num2 = max(Num2)。谢谢。

很抱歉由于积分问题,我现在无法嵌入图片。而且我发布的内容不超过2张,所以我只发布预期的内容。对于我当前的输出,您可以想象下面的预期输出是没有最后一列。 我只想在旧数据中包含最终字符变量,而我无法做到: Expected Output

1 个答案:

答案 0 :(得分:0)

我们可以使用data.table来执行此操作。将'data.frame'转换为'data.table'(setDT(Olddata)),按'ID'分组,指定要在min中获取.SDcols的列,循环显示子集Data.table获取minlapply(.SD, min)),连接(c)与{Num2'的max并设置列顺序(setcolorder)就像'Olddata'那样。

library(data.table)
setcolorder(setDT(Olddata)[, c(Num2 = max(Num2), lapply(.SD, min)), 
   .SDcols = setdiff(names(Olddata), c("Num2", "ID")), by = ID], names(Olddata))[]
#   ID   Num1     Num2 Num3 Num4   Char
#1:  1 787979   565655   12  100 George
#2:  2  13203 11213232   14  100   Dean

数据

 Olddata <- data.frame(ID = rep(c(1, 2), each = 2), Num1 = c(4545466, 787979, 13203, 444444),
     Num2 = c(565655, 74545, 22.565, 11213232), Num3 = c(12, 13, 14, 15), 
     Num4  = 100, Char = c("George", "Michael", "Dean", "Sam"), stringsAsFactors=FALSE)