R 为列的每个唯一值构建绘图

R 为列的每个唯一值构建绘图,r,for-loop,ggplot2,dplyr,R,For Loop,Ggplot2,Dplyr,我有多个变量的数据,我想为一列中的每个唯一值绘制一个图。对于类似的问题,我在这里查看了多个答案,但我无法解决我的问题 数据集的示例如下所示: structure(list(ID = c(1, 1, 1, 2, 2), Date = c("01/02/20", "01/03/20", "01/05/20", "01/02/20", "01/05/20"), New = c(10, 5, 5, 10, 5), Old = c(20, 20, 20, 20, 20), Percentage

我有多个变量的数据,我想为一列中的每个唯一值绘制一个图。对于类似的问题,我在这里查看了多个答案,但我无法解决我的问题

数据集的示例如下所示:

structure(list(ID = c(1, 1, 1, 2, 2), Date = c("01/02/20", "01/03/20", 
"01/05/20", "01/02/20", "01/05/20"), New = c(10, 5, 5, 10, 5), 
    Old = c(20, 20, 20, 20, 20), Percentage = c(0.5, 0.25, 0.25, 
    0.5, 0.25)), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))
我想做一个for循环,遍历ID的唯一值,并绘制新的和旧的vs-date。也可能是百分比变化的另一个方面,但主要是第一个比较图。我首先尝试将其设置为date vs new,如下所示:

for (ii in unique(data$ID)) {
  plt <- ggplot(data %>% filter(ID == ii),
                aes(x = "Month",
                    y = "New")) +
    geom_point(color = "dodgerblue3") + 
    theme_minimal()
  print(plt)

}

for(ii唯一(数据$ID)){
plt%过滤器(ID==ii),
aes(x=“月”,
y=“新”))+
几何点(color=“dodgerblue3”)+
主题_极小值()
打印(plt)
}

结果基本上给了我一个我不理解的点图。如何添加旧的比较以及百分比的另一个绘图。

这是您想要的吗

library(tidyverse)
library(lubridate)

df %>%
    mutate(Date = mdy(Date)) %>%
    pivot_longer(cols = c("New", "Old"), names_to = "newOrOld") %>%
    ggplot(aes(Date, value, colour = newOrOld)) +
    geom_point() +
    facet_grid(. ~ ID)

-关于循环,我认为您可以使用facet函数来代替

-关于旧/新问题,我认为您的问题来自您的数据结构,它不整洁

试试这个:

## get tidy data
tidy_data <- data %>% pivot_longer(c("New", "Old"), names_to = "Age", values_to = "Number")

## get the plots (facet_wrap is used to have multiple plots)
plt <- ggplot(tidy_data, aes(x = Date, y = Number, color = Age)) + geom_point() + facet_wrap(~ ID)
plt
##获取整洁的数据
整理数据%pivot\u更长(c(“新”、“旧”),名称到=“年龄”,值到=“数字”)
##获取绘图(镶嵌面环绕用于具有多个绘图)

plt您不能有aes(x=“月”,y=“新”),它应该是aes(x=月,y=新..)?再说一遍,为什么Monthis不在你展示的数据集中?请更准确地说明你实际上在寻找什么。我会在下面发布一个解决方案,我真的不知道它是否真的是,你在寻找什么。
## get tidy data
tidy_data <- data %>% pivot_longer(c("New", "Old"), names_to = "Age", values_to = "Number")

## get the plots (facet_wrap is used to have multiple plots)
plt <- ggplot(tidy_data, aes(x = Date, y = Number, color = Age)) + geom_point() + facet_wrap(~ ID)
plt