2016-08-23 39 views
0
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分析和按照類型細分的這些數據的圖表,例如,對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值的向量,但沒有運氣讓它工作。

+3

這些都是常見的任務,也有基礎R中的多個工具以及它們的一些軟件包。第一項任務可以通過一個簡單的for循環來完成,但第二項任務通常是通過「split-apply-combine」(谷歌它)策略完成的。 – Roland

回答

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 
0

有關柱狀圖我建議基礎R split - lapply策略,而對於其他功能dplyr解決方案可能是最快的東西。 @Roland在他的評論中也指出了這是一項經典的R任務。

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