我有一个很大的数据框,正在尝试制作折线图。
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,因变量为疫苗为“无”的平均温度
我尝试过“套用”但没有用> ..... 这实际上是我的功课,这是我非常感谢能有人帮忙的最后一周...
答案 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)
或者,如果您更喜欢基于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)