Time Distance Type
10:10 10 1
10:15 15 1
10:20 7 3
10:25 8 2
10:37 15 3
10:40 18 2
我想运行各种R分析和这些数据的图表,按类型细分,例如
hist(data$Distance[data$Type == "1"], main="Type 1", xlab="Distance (m)")
hist(data$Distance[data$Type == "2"], main="Type 2", xlab="Distance (m)")
和
examplefunction(data$Distance[data$Type == "1"])
examplefunction(data$Distance[data$Type == "2"])
等。我如何迭代所有Type
值,在函数和标签中使用它们,如示例中所示?我想有一种更快,更有效的方法,可以输出10次相同的东西,并在每一行中更改Type
的值。
我尝试过使用所有Type
值的向量,但没有运气让它运转起来。
答案 0 :(得分:1)
同意@Roland有很多方法可以做到这一点。以下是使用purrr::walk
的方法,如下所示:
require(purrr)
df %>%
split(.$Type) %>%
walk(~hist(.$Distance, main=paste("Type", .$Type[1]), xlab="Distance (m)")) %>%
map_dbl(~mean(.$Distance))
返回意为我的类型并绘制直方图。
1 2 3
12.5 13.0 11.0
答案 1 :(得分:0)
对于直方图,我建议使用基本R split
- lapply
策略,而对于其他函数,dplyr
解决方案可能是最快的。
这是一个经典的R任务,@ Roland在他的评论中也表明了这一点。
data <- data.frame(Time= as.POSIXlt(c("10:10", "10:15", "10:20", "10:25", "10:37", "10:40"), format = "%H:%M"),
Distance=c(10,15,7,8,15,18),
Type=c(1,1,3,2,3,2))
对于直方图,您可以执行以下操作(请注意自适应标题):
data.split <- split(data, data$Type)
hist<- lapply(data.split, function(x) { hist(x$Distance, main=paste0("Type ", x$Type[1], xlab=" Distance (m)")) })
对于其他功能,您可以使用dplyr
:
library(dplyr)
ddply(data, .(Type), summarise, mean.dist = mean(Distance))