我大约3周前才开始使用r,我需要帮助。我希望我能解释这个权利。
我有一个数据集,其中4列代表1种刺激的等级。有55个刺激,总计220列。我需要创建一个循环,以4的增量遍历220列,同时完成以下功能:
required_value
我需要列的每一行的总和以及总和的平均值。因此,从本质上讲,我试图以一种简洁的方式实现以下目标:
a<-rowMeans(dataset[1:4], na.rm = TRUE)
data.frame(a)
mean(a, na.rm = TRUE)
请帮助使我的生活更轻松。我需要一个循环,所以我不必手动执行55次。
先谢谢了,
伊薇特
答案 0 :(得分:0)
您可以为行平均值创建一个新的数据框,并使用带有波纹管算法的循环:
D <- data.frame(c(1:55),rep(0,55))
for( i in 1:55 )
{
D[i,2]=Mean(rowMeans(dataset[,i*4-3:i*4],na.rm=TRUE),na.rm=TRUE)
}
Mean(dataset[,2],na.rm=TRUE)
实际上,此代码计算列均值的行均值。
答案 1 :(得分:0)
您不需要for-loop
。根据{{1}}的列名以及希望显示最终结果的方式,可以有几种选择。
Base-R:一种使用dataset
和apply
的解决方案:
aggregate
选项#2:一种基于colMeans(t(apply(dataset, 1, function(x)
aggregate(x, by=list(0:(length(x)-1) %/% 4), mean, na.rm = TRUE)$x)), na.rm = TRUE)
#[1] 5.5 15.5 25.5
的解决方案。您需要重命名列以表示tidyverse
。然后使用group
转换长格式的数据。现在,您可以将基于组的数据汇总为:
gather
数据:
library(tidyverse)
dataset %>% setNames(paste("Group", ((0:(ncol(.)-1)) %/%4)+1, (1:ncol(.)),sep="_")) %>%
gather(Group, Value) %>%
mutate(Group = gsub("_\\d+$","",Group)) %>%
group_by(Group) %>%
summarise(Value = mean(Value, na.rm = TRUE))
# # A tibble: 3 x 2
# Group Value
# <chr> <dbl>
# 1 Group_1 5.50
# 2 Group_2 15.5
# 3 Group_3 25.5