我是初学者。我已经查看了大约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)。谢谢。
很抱歉由于积分问题,我现在无法嵌入图片。而且我发布的内容不超过2张,所以我只发布预期的内容。对于我当前的输出,您可以想象下面的预期输出是没有最后一列。 我只想在旧数据中包含最终字符变量,而我无法做到: Expected Output
答案 0 :(得分:0)
我们可以使用data.table
来执行此操作。将'data.frame'转换为'data.table'(setDT(Olddata)
),按'ID'分组,指定要在min
中获取.SDcols
的列,循环显示子集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)