我有一个如下所示的数据框:
df
grp V2 V3 V4 V5 V6
1 u.3 187 189 141 143
1 u.3 190 192 144 146
3 u.3 211 213 165 167
4 u.3 223 225 177 179
4 u.3 226 228 180 182
我想根据grp列对这些数据进行分组。如果重复grp(它可以重复几次),例如在前两行中,那么输出应如下所示:
grp V2 V3 V4
1 u.3 187 192
注意输出具有来自第一次grp 1发生的x $ V3 [1]的值以及最后一次出现的V4值(x $ V4 [2]是192)。
df的输出应如下所示:
df.out
grp V2 V3 V4
1 u.3 187 192
3 u.3 211 213
4 u.3 223 228
答案 0 :(得分:2)
这是问题的dplyr
解决方案。如果没有安装软件包,请安装软件包dplyr。
library(dplyr)
dat.out <- dat.in %>% group_by(grp) %>%
summarize(V2 = unique(V2),V3 = min(V3),V4 = max(V4))
答案 1 :(得分:0)
此解决方案基于函数和应用循环 - 并且还应该完成这项工作。 编辑:误解了你提取值的标准,忽略了V3和V4的第一个和最后一个值。
ValExt <- function(g) {
#Extract first V3 value of the group
fstV3 <- head(df[which(df$grp==g),"V3"],1)
#Extract last V4 value of the group
lstV4 <- tail(df[which(df$grp==g),"V4"],1)
#Return a row with the group and values
return(c(g,
head(df[which(df$grp==g),"V2"],1),
fstV3,
lstV4)
)
}
df.out <- sapply(unique(df$grp),ValExt)
答案 2 :(得分:0)
您也可以使用data.table
library(data.table)
setDT(df)[ ,list(V2=unique(V2), V3=min(V3), V4=max(V4)), by=grp]
# grp V2 V3 V4
# 1: 1 u.3 187 192
# 2: 3 u.3 211 213
# 3: 4 u.3 223 228