通过对数据帧中的数据进行分组来绘制R中的图形

时间:2017-02-15 11:36:25

标签: r dataframe plot subset

假设我有这样的数据:

distance <- c(134.2, 433.34, 332.12, 543.12, 333.12)
road.type <- c(1, 0, 1, 1, 0)
A <- c(2.3, 3.1, 4.4, 2.2, 1.4)
B <- c(0.33, 0.56, 0.45, 0.55, 0.98)

random.list <- data.frame(distance, road.type, A, B)

我希望在同一个图上,通过road.type对数据进行分类来绘制组合距离~A。因此,图中实际上应该包含两行,一行表示距离〜给出road.type = 1的数据,第二行表示距离〜给出road.type = 0的数据。

我想出的是:

random.list.sp1 <- random.list[random.list$road.type == "1"]

但是我得到的回报并不是包含只有road.type = 1的行的表,而是包含所有行但没有road.type列的表。

另外一般情况下,对于任何其他类型的绘图,是否有一种快速方法可以通过给定列修改数据?特别是,我可以在pair()或scatterplot()等中使用所提出的技术吗?

1 个答案:

答案 0 :(得分:0)

这是一种方法。您的road.type需要不是数字(例如因子)才能将图表分成2个系列。

distance <- c(134.2, 433.34, 332.12, 543.12, 333.12)
road.type <- c(1, 0, 1, 1, 0)
A <- c(2.3, 3.1, 4.4, 2.2, 1.4)
B <- c(0.33, 0.56, 0.45, 0.55, 0.98)

random.list <- data.frame(distance, road.type, A, B)

random.list$road.type <- as.factor(random.list$road.type)
library(tidyverse)

data <- gather(random.list, distance, road.type)
names(data) <- c("distance", "road_type", "class", "value")
data <- data %>% filter(class == "A")
ggplot(data, aes(distance, value, color = road_type)) + geom_line()