【发布时间】:2018-08-06 18:36:51
【问题描述】:
我是 R 编程新手,我正在处理一个包含数百个变量和数千个观察值的庞大数据集。在这些变量中,我主要关心的是年龄。我想获得年龄函数中其他变量的平均值。我可以用这个得到更小的桌子:
for(i in 18:84)
{
n<- sprintf("SortAgeM%d",i)
assign(x=n,subset(SortAgeM,subset=(SortAgeM$AGE>=i & SortAgeM$AGE<i+1)))
}
"SortAgeM85plus"<-subset(SortAgeM,subset=(SortAgeM$AGE>=85 & SortAgeM$AGE<100))
这为我提供了我关心的每个年龄的子数据集。然后我想得到每列的平均值。每列都是对特定大脑区域体积的观察。我很想知道音量是如何随时间减少的,我想知道给定年龄的人是否接近他们的平均年龄。
现在,我想再得到一行,每列的平均值。所以我尝试了这个:
for(i in 18:85) {
addmargins((SortAgeM%d,i), margin=1, FUN= "mean")
}
但它没有用......我被卡住了,我对 R 函数还不够熟悉,无法在网上找到解决方案...... 感谢您的帮助。
维克多
发布答案编辑:这就是我最终所做的:
for(i in 18:84)
{
n<- sprintf("SortAgeM%d",i)
assign(x=n,subset(SortAgeM,subset=(SortAgeM$AGE>=i & SortAgeM$AGE<i+1)))
Ajustment<-c(NA,NA,NA,NA,NA,NA,NA) #first variables aren't numeric
Line1<- colMeans(item[,8:217],na.rm=TRUE)
Line<-c(Ajustment,Ligne1)
assign(x=n, rbind(item,Ligne))
}
【问题讨论】:
-
你需要
get和assign -
这应该是一个容易回答的问题,但不清楚您到底想做什么。如果您可以包含起始数据和所需输出的示例,您将立即得到答案。请阅读How to Ask和How to make a great R reproducible example
-
我认为使用
get和assign几乎总是一个坏主意,即使对于 R 专家也是如此。将它们用作新手是彻底灾难的秘诀。这听起来像是一个简单的dplyrfilter %>% group_by %>% summarize问题,但我不确定想要的结果到底是什么 -
我想得到完全相同的数据集,多一行包含每一列的平均值
-
如果您只想获取每一列的平均值,那么(正如@SmitM 建议的那样)
colMeans(df)在一行中执行此操作。但是,在您的问题中,您谈到获得means for each other variables in function of Age这听起来不止于此。如果@SmitM 回答了您的问题,您应该接受他的回答,否则,请包括您的起始数据和所需输出的示例。
标签: r