如何重新排列dplyr的输出

问题描述 投票:0回答:1

当我编写以下代码时

   ddply(milkers, .(dim_cat, lact_cat), function(x) mean(x$milkyield))

我得到以下输出

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9PcFlNVy5wbmcifQ==” alt =“每个时间段有2行的初步输出”>

关于按奶种(1对2)的牛奶产量的平均计算是正确的。我想以一张下面的桌子结束。

<<

有效地,我正在尝试获取每个时间段内的动物数量,并计算它们的平均产奶量。问题在于它正在计算所有时间段的动物总数和所有时间段的平均产奶量。

我用于生成此数据的代码如下。

heiferdat <- subset(milkers, lact_cat== 1) cowdat <- subset(milkers, lact_cat== 2) ddply(milkers, .(dim_cat), function(x) c(Heifers = sum(milkers$lact_cat==1), H_Milk= mean(heiferdat$milkyield), Cows = sum(milkers$lact_cat==2), C_Milk= mean(cowdat$milkyield)))

我曾预计,在此代码中,。(dim_cat)变量将应用于该函数,以限制求和和均值函数,使其仅包括正确时间段内的动物。 

我正在寻找有关如何在每个时间段内获得一行的输出的信息,其中包括每个乳猫类别的动物数量和每个乳猫的平均奶产量

谢谢

以下是我正在使用的数据的子集。

dput(milkers[180:200, c(11, 25, 26)]) dput(heiferdat[1:20, c(11, 25, 26)]) dput(cowdat[1:20, c(11, 25, 26)]) > dput(milkers[180:200, c(11, 25, 26)])

结构(列表(milkyield =结构(c(8.42,38.32,14.27,7.68,16.59、17.19、24.45、33.47、36.16、25.88、11.61、18.96、11.27,33.6,21.57,20.87,9.62,7.93,21.02,17.75,22.01),标签=“牛奶(L)”,类别= c(“标签”,“数字”)),dim_cat =结构(c(5L,3L,7L,7L,2L,7L,2L,2L,2L,3L,6L,6L,2L,3L,6L,6L,6L,6L,6L,7L,6L),. Label = c(“ <31”,“ 31-90”,“ 91-150”,“ 151-210”,“ 211-270”,“ 271-330”,“> 330”),类别= c(“ labeled”,“ factor”),label =“ Days in Milk”),lact_cat = structure(c(2L,2L,1L,2L,2L,1L,2L,2L,2L,2L,1L,1L,1L,2L,1L,1L,1L,1L,1L,1L,1L),.Label = c(“ 1”,“ 2”),class =“ factor”)),row.names = 180:200,class =“ data.frame”)

dput(heiferdat [1:20,c(11,25,26)])) 结构(列表(milkyield =结构(c(14.27,17.19,11.61,18.96, 11.27、21.57、20.87、9.62、7.93、21.02、17.75、22.01、25.15, 11.75、12.6、15.62、19.29、8.85、15.52、11.62),标签=“牛奶(L)”,类别= c(“标签”, “数字”)),dim_cat =结构(c(7L,7L,6L,6L,2L,6L,6L, 6L,6L,6L,7L,6L,6L,6L,6L,7L,6L,6L,6L,6L),. Label = c(“ <31”, “ 31-90”,“ 91-150”,“ 151-210”,“ 211-270”,“ 271-330”,“> 330”),类别= c(“ labeled”, “ factor”),label =“ Days in Milk”),lact_cat = structure(c(1L, 1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L, 1L,1L,1L),.Label = c(“ 1”,“ 2”),class =“ factor”)),row.names = c(182L, 185L,190L,191L,192L,194L,195L,196L,197L,198L,199L,200L, 201L,202L,203L,204L,205L,206L,207L,208L),类=“ data.frame”)

dput(cowdat [1:20,c(11,25,26)]) 结构(列表(milkyield =结构(c(15.73,14.56,16.94,16.25, 39.09、9.79、8.41、3.05、38.89、11.7、29.89、19.73、18.2、20.63, 20.32,52.99,10.11,8.08,10.84,33.75),标签=“牛奶(L)”,类别= c(“标签”, “数字”)),dim_cat =结构(c(3L,6L,6L,2L,3L,7L,6L, 7L,3L,7L,3L,6L,3L,6L,2L,2L,7L,6L,7L,7L),. Label = c(“ <31”, “ 31-90”,“ 91-150”,“ 151-210”,“ 211-270”,“ 271-330”,“> 330”),类别= c(“ labeled”, “ factor”),label =“ Days in Milk”),lact_cat = structure(c(2L, 2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L,2L, 2L,2L,2L),.Label = c(“ 1”,“ 2”),class =“ factor”)),row.names = c(NA, 20L),class =“ data.frame”)

[当我编写以下代码ddply(milkers,..(dim_cat,lact_cat),function(x)mean(x $ milkyield))时,我得到以下输出关于按奶种分类的牛奶产量的平均值计算(...] >

r dplyr mean
1个回答
0
投票
根据@DanChaltiel的建议使用dplyr。这是dplyr的方法:

library(dplyr) all_summary = milkers %>% group_by(dim_cat, lact_cat) %>% summarise(avg = mean(milkyield), num = n())

© www.soinside.com 2019 - 2024. All rights reserved.