我有数百份数据,这些数据可从多份研究论文中获得不同年龄的小型动物的体重。我想按年龄分组和分析体重,持续7天。我已经使用cut in R成功地按年龄对数据进行分组,并在每个7d bin中具有默认数量的值(计数)。但是即使经过大量谷歌搜索,我也找不到扩展“切割”的方法来获得每个年龄段的基本统计摘要,包括均值,SE,CL和中位数。那有可能吗,有人可以帮助我或指出正确的方向吗?
我还查看了dplyr,尽管它似乎具有提供统计摘要的功能,但是我看不到一种按7d间隔对年龄进行分组的方法。那会是更好的选择吗?
感谢您非程序员的帮助。
附加信息
感谢你们双方的意见。抱歉,我们提供的信息有限,希望这可以解决问题。我在Excel中有2000多行数据。行是以天为单位的年龄,列是“ MaleFI”,“ MaleMEI”和“ MaleBW”,其中FI是食物摄入量,MEI是可代谢能量摄入,BW是体重。数据的一部分如下所示。通常,我可以使用Excel数据透视表来分析数据,但其中不包含计算中位数或标准误差的选项;Power Pivot可以但不能分组!因此,数据如下(按天数排序,没有空格):
年龄是连续的,可能会上升到约900个,每个年龄的值都有不同的数量。
我们的目标是按7d周期分组,并且如上所述,我对每组进行了统计分析:
这是我用来对数据进行分组的代码,但是如前所述,事后看来,可能将dplyr与group_by一起使用并进行汇总可能是一种更好的方法。
library("xlsx")
library("dplyr")
Pivot.data <- read.xlsx(file.choose(), 1) # read first sheet
pt<-cut(Pivot.data$Age, breaks=seq(21, 800, by=7))
table(pt)
输出为(21,28](28,35](35,42](42,49](49,56](56,63](63,70](70,77]
6 15 41 73 92 98 95 99
我会对范围的格式感到满意,即(21,28]等而不是21-28。
感谢您的评论,对不起,您没有明确要求。感谢您付出宝贵的时间来提供帮助。
丹,这是使用dput的输出:
dput(head(Pivot.data,20))结构(list(Age = c(28,28,28,28,28,28,30,35,35,35,35,35,35,35,35,35,35 ,35,35,35,35),MaleFI = c(14.62,13.82,10.6691449814126,15.9859154929577,11.7,14.0273778252258,13.5877862595419,17.73,17.93,17.99,22.1214285714286,17.6,22.48,21.7,19.6,21.4,21.25,20.37, 19.3215613382899,23.169014084507),MaleMEI = c(212.66252,201.02572,144.342862453531,216.273450704225,160.171462269,204.047711328562,197.653240885495,257.90058,241.76812,261.68254,298.285342857,29.345.243.143.345 MaleBW = c(121.68,112.15,85.7142857142856,143.181818181818,109.20245398773,89.8187948576385,126.522593320235,131.96,127.98,142.57,126.92,146.9,145.45,131.9,129.8,132.4,191.21,179.44238,138。272727272727)),row.names = c(NA,20L),class =“ data.frame”)
如果我理解正确(但是请下次尝试包含可复制的示例),则此代码应执行以下操作:
library(tidyverse)
your_df %>%
# mutate(Age_cl = cut(Age, c(-Inf,30,60,Inf))) %>%
mutate(Age_cl = cut(Age, breaks=c(-Inf, seq(min(Age), max(Age), by=7), Inf), right = F)) %>%
group_by(Age_cl) %>%
summarise(
n=n(),
m=mean(Age, na.rm=T),
sd=sd(Age, na.rm=T),
max=max(Age, na.rm=T),
min=min(Age, na.rm=T)
)
您创建了age_cl
作为的结果的新列cut
,然后按此新列和summarise
(或可以mutate
再次根据需要)所有所需的摘要进行分组。
您还可以使用summarise_at
一系列功能:
your_df %>%
mutate(Age_cl = cut(Age, c(-Inf,30,60,Inf))) %>%
group_by(Age_cl) %>%
summarise_at("Age", list(m=mean, sd=sd, max=max, min=min), na.rm=T)
请注意,其他参数将适用于所有功能,例如na.rm
此处。
编辑:对于记录,似乎有一种使用该summary
函数的方法,但是您必须将其结果转换为data.frame才能起作用。summary
与像上面那样编写函数相比,这可能不值得。这是iris
数据集的示例:
iris %>%
mutate(Sepal.Length_cl = cut(Sepal.Length, c(-Inf,5,6,Inf))) %>%
group_by(Sepal.Length_cl) %>%
group_modify(~summary(.$Sepal.Length) %>% unclass %>% t %>% as.data.frame)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句