定义
df<-read.table(textConnection('egg 1 20 a
egg 2 30 a
jap 3 50 b
jap 1 60 b'))
s.t。
> df
V1 V2 V3 V4
1 egg 1 20 a
2 egg 2 30 a
3 jap 3 50 b
4 jap 1 60 b
我的数据没有因素,因此我将因子转换为字符:
> df$V1 <- as.character(df$V1)
> df$V4 <- as.character(df$V4)
我希望通过V1保持“折叠”数据框:
请注意这是一般性问题,例如:我的数据集要大得多,我可能希望在折叠时使用不同的函数(例如,last,first,min,max,variance,st.dev。等,以用于不同的变量)。因此函数参数可能很长。
在这种情况下,我想要输出表格:
> df.collapse
V1 V2 V3 V4
1 egg 2 25 a
2 jap 3 55 b
答案 0 :(得分:8)
plyr包将帮助您:
library(plyr)
ddply(df, .(V1), summarize, V2 = max(V2), V3 = mean(V3), V4 = toupper(V4)[1])
由于R没有模式功能(可能),我把其他功能。 但是实现模式功能很容易。
答案 1 :(得分:5)
我建议使用ddply
中的plyr
:
require(plyr)
ddply(df, .(V1), summarise, V2=max(V2), V3=mean(V3), V4=V4[1])
您可以使用任何计算替换这些功能。您的V3列是非数字的,因此可能希望将其转换为数字,然后计算模式。现在我只是为每个分割返回第一行的V3值。或者,如果您不想使用plyr
:
do.call(rbind, lapply(split(df, df$V1), function(x) {
data.frame(V2=max(x$V2), V3=mean(x$V3), V4=x$V4[1]))
})