无法将 aggregate() 与模式 'list' 的 data.frame 一起使用
unable to use aggregate() with data.frame of mode 'list'
初步步骤:
#======================
# added ‘height’ column to the in-built data.frame: CO2
height <- runif(84, 30.0, 44)
cbind(CO2, height)
#======================
聚合 CO2 数据框 产生正确的结果:
> aggregate(cbind(height,uptake)~conc, CO2, mean)
conc height uptake
1 95 37.04813 12.25833
2 175 38.14815 22.28333
3 250 34.70362 28.87500
4 350 32.81782 30.66667
5 500 37.19268 30.87500
6 675 36.16915 31.95000
7 1000 37.33184 33.58333
Alternatively,
> aggregate(CO2[,cbind("height","uptake")], by = list(CO2$conc), FUN = mean)
Group.1 height uptake
1 95 37.04813 12.25833
2 175 38.14815 22.28333
3 250 34.70362 28.87500
4 350 32.81782 30.66667
5 500 37.19268 30.87500
6 675 36.16915 31.95000
7 1000 37.33184 33.58333
但是,当我将 CO2 转换为列表时:
> CO2list <- lapply(CO2, as.data.frame)
> summary(CO2list)
Length Class Mode
Plant 1 data.frame list
Type 1 data.frame list
Treatment 1 data.frame list
conc 1 data.frame list
uptake 1 data.frame list
height 1 data.frame list
使用 CO2list,但是,我在下面的四个 aggregate() 尝试中收到错误。
问题:如何使用 CO2list 进行聚合,它是 data.frame 的 模式 '列表'?
> aggregate(cbind(height,uptake)~conc, CO2list, mean)
Error in model.frame.default(formula = cbind(height, uptake) ~ conc, data = CO2list) :
invalid type (list) for variable 'cbind(height, uptake)'
> aggregate(CO2list[,cbind("height","uptake")], by = list(CO2list$conc), FUN = mean)
Error in CO2list[, cbind("height", "uptake")] :
incorrect number of dimensions
> aggregate(cbind(height,uptake), by = list(CO2list$conc), FUN = mean)
Error in cbind(height, uptake) : object 'uptake' not found
> aggregate(cbind(CO2list$height,CO2list$uptake), by = list(CO2list$conc), FUN = mean)
Error in aggregate.data.frame(cbind(CO2list$height, CO2list$uptake), by = list(CO2list$conc), :
arguments must have same length
谢谢
它是一个 list
单列 data.frame 并且名称也更改了。一种选择是通过 cbind
ing list
元素将其转换回单个 data.frame,然后应用 aggregate
newDat <- setNames(do.call(cbind, CO2list), names(CO2list))
aggregate(cbind(height,uptake)~conc, newDat, mean)
# conc height uptake
#1 95 39.15248 12.25833
#2 175 35.38677 22.28333
#3 250 38.56924 28.87500
#4 350 37.73494 30.66667
#5 500 35.37963 30.87500
#6 675 36.26344 31.95000
#7 1000 36.43538 33.58333
或者提取 list
元素并在 aggregate
中使用它
aggregate(cbind(height, uptake = CO2list[["uptake"]][[1]]),
list(conc = CO2list[["conc"]][[1]]), FUN = mean)
# conc height uptake
#1 95 39.15248 12.25833
#2 175 35.38677 22.28333
#3 250 38.56924 28.87500
#4 350 37.73494 30.66667
#5 500 35.37963 30.87500
#6 675 36.26344 31.95000
#7 1000 36.43538 33.58333
初步步骤:
#======================
# added ‘height’ column to the in-built data.frame: CO2
height <- runif(84, 30.0, 44)
cbind(CO2, height)
#======================
聚合 CO2 数据框 产生正确的结果:
> aggregate(cbind(height,uptake)~conc, CO2, mean)
conc height uptake
1 95 37.04813 12.25833
2 175 38.14815 22.28333
3 250 34.70362 28.87500
4 350 32.81782 30.66667
5 500 37.19268 30.87500
6 675 36.16915 31.95000
7 1000 37.33184 33.58333
Alternatively,
> aggregate(CO2[,cbind("height","uptake")], by = list(CO2$conc), FUN = mean)
Group.1 height uptake
1 95 37.04813 12.25833
2 175 38.14815 22.28333
3 250 34.70362 28.87500
4 350 32.81782 30.66667
5 500 37.19268 30.87500
6 675 36.16915 31.95000
7 1000 37.33184 33.58333
但是,当我将 CO2 转换为列表时:
> CO2list <- lapply(CO2, as.data.frame)
> summary(CO2list)
Length Class Mode
Plant 1 data.frame list
Type 1 data.frame list
Treatment 1 data.frame list
conc 1 data.frame list
uptake 1 data.frame list
height 1 data.frame list
使用 CO2list,但是,我在下面的四个 aggregate() 尝试中收到错误。
问题:如何使用 CO2list 进行聚合,它是 data.frame 的 模式 '列表'?
> aggregate(cbind(height,uptake)~conc, CO2list, mean)
Error in model.frame.default(formula = cbind(height, uptake) ~ conc, data = CO2list) :
invalid type (list) for variable 'cbind(height, uptake)'
> aggregate(CO2list[,cbind("height","uptake")], by = list(CO2list$conc), FUN = mean)
Error in CO2list[, cbind("height", "uptake")] :
incorrect number of dimensions
> aggregate(cbind(height,uptake), by = list(CO2list$conc), FUN = mean)
Error in cbind(height, uptake) : object 'uptake' not found
> aggregate(cbind(CO2list$height,CO2list$uptake), by = list(CO2list$conc), FUN = mean)
Error in aggregate.data.frame(cbind(CO2list$height, CO2list$uptake), by = list(CO2list$conc), :
arguments must have same length
谢谢
它是一个 list
单列 data.frame 并且名称也更改了。一种选择是通过 cbind
ing list
元素将其转换回单个 data.frame,然后应用 aggregate
newDat <- setNames(do.call(cbind, CO2list), names(CO2list))
aggregate(cbind(height,uptake)~conc, newDat, mean)
# conc height uptake
#1 95 39.15248 12.25833
#2 175 35.38677 22.28333
#3 250 38.56924 28.87500
#4 350 37.73494 30.66667
#5 500 35.37963 30.87500
#6 675 36.26344 31.95000
#7 1000 36.43538 33.58333
或者提取 list
元素并在 aggregate
aggregate(cbind(height, uptake = CO2list[["uptake"]][[1]]),
list(conc = CO2list[["conc"]][[1]]), FUN = mean)
# conc height uptake
#1 95 39.15248 12.25833
#2 175 35.38677 22.28333
#3 250 38.56924 28.87500
#4 350 37.73494 30.66667
#5 500 35.37963 30.87500
#6 675 36.26344 31.95000
#7 1000 36.43538 33.58333