如何使用一列和另一列的平均值绘制折线图?

时间:2019-05-03 03:30:01

标签: r

我有一个很大的数据框,正在尝试制作折线图。

Ferret ID   Vaccine Day Temperature Weight
558 None    -2  100.6   1420
558 None    -1  101.5   1420
558 None    20  102 1450
547 Vaccine 31  101.5   1080
547 Vaccine 32  100.8   1100
548 Vaccine -2  100.7   1290
548 Vaccine -1  101.2   1300
548 Vaccine 0   101.6   1320
548 Vaccine 1   101.5   1031
548 Vaccine 2   101.9   1310
548 Vaccine 3   101.6   1300
548 Vaccine 7   101.7   1300
548 Vaccine 14  102.2   1280
....

我希望自变量为day,因变量为疫苗为“无”的平均温度

我尝试过“套用”但没有用> ..... 这实际上是我的功课,这是我非常感谢能有人帮忙的最后一周...

1 个答案:

答案 0 :(得分:1)

这是三种解决方案。将来,它有助于显示您的尝试,因此我们可以根据您的方法和/或偏好来定制答案。

首先,您的数据格式不正确:R中不鼓励在列名中使用空格,因此在此示例中,我将使用

x <- read.table(header=TRUE, stringsAsFactors=FALSE, text="
ID  Vaccine Day Temperature Weight
558 None    -2  100.6       1420
558 None    -1  101.5       1420
558 None    20  102         1450
547 Vaccine 31  101.5       1080
547 Vaccine 32  100.8       1100
548 Vaccine -2  100.7       1290
548 Vaccine -1  101.2       1300
548 Vaccine 0   101.6       1320
548 Vaccine 1   101.5       1031
548 Vaccine 2   101.9       1310
548 Vaccine 3   101.6       1300
548 Vaccine 7   101.7       1300
548 Vaccine 14  102.2       1280")

第二,我假设您所有的Day值都是整数;否则,将导致分组问题,因为根据整日数据,除整数天以外的其他任何事情都没有意义。

好的,这是一种仓促的base-R处理方式:

x1 <- x[ x$Vaccine == "None", ]
x2 <- do.call(
  rbind.data.frame,
  by(x1, x1$Day, function(a) data.frame(Day = a$Day[1], AvgTemp = mean(a$Temperature, na.rm=TRUE)))
)
x2
#    Day AvgTemp
# -2  -2   100.6
# -1  -1   101.5
# 20  20   102.0
plot(AvgTemp ~ Day, data = x2, type = "b", pch = 16)

simple line graph

或者,如果您更喜欢基于dplyr或基于data.table的解决方案:

library(dplyr)
x %>%
  filter(Vaccine == "None") %>%
  group_by(Day) %>%
  summarize(AvgTemp = mean(Temperature, na.rm = TRUE)) %>%
  plot(AvgTemp ~ Day, data = ., type = "b", pch = 16)

library(data.table)
DT <- as.data.table(x)
DT1 <- DT[ Vaccine == "None", .(AvgTemp = mean(Temperature, na.rm = TRUE)), by = "Day" ]
plot(AvgTemp ~ Day, data = DT1, type = "b", pch = 16)