尽可能使r中的代码更加优雅和简短-r
一点背景:这是一段代码,用于计算一只名为BOE 1的老鼠在12天的研究过程中平均行走的距离,每天重复4次实验。每个数据集中有19只老鼠接受测试 问题:我想计算每个鼠标的平均移动距离,并将其放入表格中。我所做的一切都是可行的,但我很好奇是否有办法使下面的代码更短、重复性更少 尝试的选项:尽可能使r中的代码更加优雅和简短-r,r,mean,R,Mean,一点背景:这是一段代码,用于计算一只名为BOE 1的老鼠在12天的研究过程中平均行走的距离,每天重复4次实验。每个数据集中有19只老鼠接受测试 问题:我想计算每个鼠标的平均移动距离,并将其放入表格中。我所做的一切都是可行的,但我很好奇是否有办法使下面的代码更短、重复性更少 尝试的选项: mean(BOE.1Data$Distance.cm[BOE.1Data$Day == c(1,2, ect)] mean(BOE.1Data$Distance.cm[BOE.1Data$Day == c(1|2
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == c(1,2, ect)]
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == c(1|2| ect)]
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == c(1&2& ect)]
这些都不适合我
代码:
Distance.1 = c(mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 1]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 2]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 3]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 4]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 5]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 6]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 7]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 8]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 9]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 10]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 11]),
mean(BOE.1Data$Distance.cm[BOE.1Data$Day == 12]))
您可以使用
by()
执行此操作:
n一种方法,包含数据。表
。将“data.frame”转换为“data.table”(setDT(BOE.1Data)
),按“Day”分组,得到“Distance.cm”的平均值
library(data.table)
setDT(BOE.1Data)[, .(MeanDist = mean(Distance.cm)) , by = Day]
另一种使用dplyr
和magrittr
的方法是使用arrange()
来确保它们是有序的
Distance.1 <- BOE.1Data %>% group_by(Day) %>%
mutate(mean_dist=mean(Distance.cm)) %>%
arrange(Day) %$% mean_dist
Distance.1%按天分组%>%
变异(平均距离=平均距离(cm))%>%
安排(天)%$%平均距离
欢迎来到StackOverflow。请提供您想要的(BOE.1Data,tapply(Distance.cm,Day,mean))
,但如果没有样本输入和所需输出,很难确定。1。对于R2中的
-循环,应该避免使用。你的代码显然不能按你想象的方式工作。我被教导应该使用for循环来缩短代码。我只是想提供一些帮助,并提供一种解决问题的方法,但我是半新手,因此没有测试代码的数据,我无法保证代码的准确性。
library(data.table)
setDT(BOE.1Data)[, .(MeanDist = mean(Distance.cm)) , by = Day]
Distance.1 <- BOE.1Data %>% group_by(Day) %>%
mutate(mean_dist=mean(Distance.cm)) %>%
arrange(Day) %$% mean_dist