对R中的列中的多个值重复分析,绘图等

时间:2016-08-23 09:55:23

标签: r

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值的向量,但没有运气让它运转起来。

2 个答案:

答案 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))