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)
我是初学者。我看过大约 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)