使用R计算数据集中每种独特动物的特征平均值
我有一个数据集,我需要计算每个独特dam的特征平均值,这是一个示例数据集:使用R计算数据集中每种独特动物的特征平均值,r,unique,average,R,Unique,Average,我有一个数据集,我需要计算每个独特dam的特征平均值,这是一个示例数据集: pig <- c(20111,20112,20113,20571,20572,20573,20584,20585,20586) sex <- c(1,1,2,2,2,2,2,1,2) wt <- c(1.54,0.84,0.83,1.14,1.42,1.07,1.25,1.05,1.42) dam <- c(1661,1661,1661,1027,1027,1027,10331,10331,103
pig <- c(20111,20112,20113,20571,20572,20573,20584,20585,20586)
sex <- c(1,1,2,2,2,2,2,1,2)
wt <- c(1.54,0.84,0.83,1.14,1.42,1.07,1.25,1.05,1.42)
dam <- c(1661,1661,1661,1027,1027,1027,10331,10331,10331)
res <-c(1,1,1,1,1,NA,1,2,1)
mt <- c(2,2,2,1,1,NA,1,1,1)
ms <- c(1,1,1,1,1,NA,1,1,1)
cr <- c(26,24,21,23,25,24,22,22,22)
rt <- c(38.7,37.2,37.8,38.1,38.4,NA,38.1,38,38.3)
data <- data.frame(pig,sex,wt,dam,res,mt,ms,cr,rt)
data
pig这是:
我们应该为平均值做点什么。我假设您希望将NAs从受影响变量的平均值中排除,但将观察值包括在内。计数可通过以下方式获得:
aggregate(pig ~ dam, data=data, FUN=length)
这:
我们应该为平均值做点什么。我假设您希望将NAs从受影响变量的平均值中排除,但将观察值包括在内。计数可通过以下方式获得:
aggregate(pig ~ dam, data=data, FUN=length)
plyr
软件包具有非常有用的功能。例如,我们可以使用ddply
按因子拆分数据帧,应用函数,然后在数据帧中再次返回结果:
library('plyr')
ddply(data,.(dam),mean,na.rm=T)
pig sex wt dam res mt ms cr rt
1 20572 2.000000 1.21 1027 1.000000 1 1 24.00000 38.25000
2 20112 1.333333 1.07 1661 1.000000 2 1 23.66667 37.90000
3 20585 1.666667 1.24 10331 1.333333 1 1 22.00000 38.13333
或者使用summary
功能进行更多的控制:
ddply(data,.(dam),summarize,
tpig = 3,
asex = mean(sex,na.rm=T),
sexRatio = sum(sex==1)/sum(sex==2),
awt = mean(wt,na.rm=T),
ares = mean(res,na.rm=T),
amt = mean(mt,na.rm=T),
ams = mean(ms,na.rm=T),
acr = mean(cr,na.rm=T),
art = mean(rt,na.rm=T),
count = length(pig))
dam tpig asex sexRatio awt ares amt ams acr art count
1 1027 3 2.000000 0.0 1.21 1.000000 1 1 24.00000 38.25000 3
2 1661 3 1.333333 2.0 1.07 1.000000 2 1 23.66667 37.90000 3
3 10331 3 1.666667 0.5 1.24 1.333333 1 1 22.00000 38.13333 3
plyr
软件包具有非常有用的功能。例如,我们可以使用ddply
按因子拆分数据帧,应用函数,然后在数据帧中再次返回结果:
library('plyr')
ddply(data,.(dam),mean,na.rm=T)
pig sex wt dam res mt ms cr rt
1 20572 2.000000 1.21 1027 1.000000 1 1 24.00000 38.25000
2 20112 1.333333 1.07 1661 1.000000 2 1 23.66667 37.90000
3 20585 1.666667 1.24 10331 1.333333 1 1 22.00000 38.13333
或者使用summary
功能进行更多的控制:
ddply(data,.(dam),summarize,
tpig = 3,
asex = mean(sex,na.rm=T),
sexRatio = sum(sex==1)/sum(sex==2),
awt = mean(wt,na.rm=T),
ares = mean(res,na.rm=T),
amt = mean(mt,na.rm=T),
ams = mean(ms,na.rm=T),
acr = mean(cr,na.rm=T),
art = mean(rt,na.rm=T),
count = length(pig))
dam tpig asex sexRatio awt ares amt ams acr art count
1 1027 3 2.000000 0.0 1.21 1.000000 1 1 24.00000 38.25000 3
2 1661 3 1.333333 2.0 1.07 1.000000 2 1 23.66667 37.90000 3
3 10331 3 1.666667 0.5 1.24 1.333333 1 1 22.00000 38.13333 3
那真是太棒了!你甚至还加上了性别比例,这在我脑海里已经有一段时间了。再次感谢大家,干杯!那真是太棒了!你甚至还加上了性别比例,这在我脑海里已经有一段时间了。再次感谢大家,干杯!