我正在尝试使用reshape2包在我的数据集顶部重新分配列。我有温度和chl-a在三个地点测量两次。但是,当我融合并转换数据框时,fun.aggregate默认为length。我想保留原始值。以下是一个示例数据集:
library(reshape2)
library(stringr)
df=data.frame(site=rep(1:3,each=2),temp_2009=c(23,24,25,25,23,43),chla_2009=c(3,2,3,4,5,6),
temp_2010=c(23,25,26,27,23,23),chla_2010=c(2,3,5,6,2,1))
df2=melt(df,id.vars=1,measure.vars=c(2:5))
df2=cbind(df2,data.frame(str_split_fixed(df2$variable,"_",2)))
df2=df2[,-2]
names(df2)[3:4]=c("variable","year")
dcast(df2,site+year~variable)
我认为这与reshape2处理重复值的方式有关。
有什么想法吗?
答案 0 :(得分:3)
正在汇总行,因为dcast
无法根据提供的公式区分它们。如果要保留原始值,则需要包含一个字段以唯一地标识重复项。继续你的代码...
df2$group <- rep(1:2,12)
dcast(df2,site+year+group~variable)
显然,这段代码有点过分了(特别是您的数据必须按'group'排序,没有缺失值),但它应该用于演示如何保留原始值。
答案 1 :(得分:1)
尝试使用重复值dcast熔融数据集的另一个选择是让dcast计算平均值/中值/最小值/最大值(根据您的情况最相关)以“解决”重复项。
dcast(df2, site+year~variable, fun.aggregate = mean)
显然删除(合并)记录 - OP说这是不可取的