ddplyr 将 char 变量放入旧数据框中,根据条件放入新数据框中

ddplyr put char variable in old data frame, into new data frame based on condition

我是初学者。我看过大约 10 个与 ddplyr 相关的问题,但大部分我都不理解。根据我的情况,我无法将字符变量从旧数据帧传输到新数据帧。这样,即使我只有一个主要条件,我也必须为每个数字变量制定单独的条件才能将其放入新的 df 中。下面的代码对我有用,除了字符变量。

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

数据

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

抱歉,我现在无法嵌入图像,因为积分 issue.And 我不能 post 超过 2 个,所以我只是 post 符合预期。对于我当前的输出,您可以想象低于预期的输出是没有最后一列的输出。 我只是想包含旧数据中的最终字符变量,但我做不到: Expected Output

我们可以使用data.table来做到这一点。将'data.frame'转换为'data.table'(setDT(Olddata)),按'ID'分组,指定列得到.SDcols中的min,循环遍历Data.table 的子集以获得 min (lapply(.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)