Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从列中找出全年每天的最大数量,并在R中创建一个最大数量的绘图_R - Fatal编程技术网

从列中找出全年每天的最大数量,并在R中创建一个最大数量的绘图

从列中找出全年每天的最大数量,并在R中创建一个最大数量的绘图,r,R,有一个全年数据库: Month Day Time X Y ... 3 1 0 2 4 3 1 1 4 2 3 1 2 7 3 3 1 3 8 8 3 1 4 4 6 3 1 5 1 4 3 1 6 6 6 3 1 7 7 9 ... 3 2 0 5 7 3 2

有一个全年数据库:

Month Day Time  X   Y
...
3      1    0   2   4
3      1    1   4   2
3      1    2   7   3
3      1    3   8   8
3      1    4   4   6
3      1    5   1   4
3      1    6   6   6
3      1    7   7   9
...
3      2    0   5   7
3      2    1   7   2
3      2    2   9   3
...
4      1    0   2   8
...
我希望找到每天X的最大值,并为每天创建一个绘图,从一天开始时间0到找到的最大值。我尝试使用dataframe,但我有点迷路了,而且数据库相当大,所以我不确定这是否是最好的主意


有什么办法吗?

如果我理解正确,这应该可以:

样本数据集:

set.seed(123)
df <- data.frame(Month = sample(c(1:12), 30, replace = TRUE), 
                 Day = sample(c(1:31), 30, replace = TRUE), 
                 Time = sample(c(1:24), 30, replace = TRUE),
                 x = rnorm(30, mean = 10, sd = 5),
                 y = rnorm(30, mean = 10, sd = 5))
输出:

你可以尝尝小提花。每天和每月重复的次数将被删除,而不进行任何排名

library(tidyverse)
set.seed(123)
df <- data.frame(Month = sample(c(1:2), 30, replace = TRUE), 
                 Day = sample(c(1:2), 30, replace = TRUE), 
                 Time = sample(c(1:10), 30, replace = TRUE),
                 x = rnorm(30, mean = 10, sd = 5),
                 y = rnorm(30, mean = 10, sd = 5))

df %>%
  group_by(Month, Day) %>%
  filter(!duplicated(Time)) %>%  # remove dupliceted "Time"'s.  
  filter(x<=max(x) & Time <= Time[x == max(x)]) %>% 
  ggplot(aes(Time, x)) + 
   geom_line() + 
   geom_point(data=. %>% filter(x == max(x)))+ 
   facet_grid(Month~Day, labeller = label_both)
或者尝试使用不同的颜色将所有内容放在一个绘图中

df %>%
  group_by(Month, Day) %>%
  filter(!duplicated(Time)) %>% 
  filter(x<=max(x) & Time <= Time[x == max(x)]) %>% 
  ggplot(aes(Time, x, color = interaction(Month, Day))) + 
   geom_line() + 
   geom_point(data=. %>% filter(x == max(x)))

aggregateX~Month+Day,data=df,max将为您提供每月每天的最大值。欢迎使用SO!请阅读并复制您的示例,请参阅!看起来我的数据库太大了,无法进行函数变异。我试图将NA改为NA_整数和其他选项,但这样做既没有结果也没有错误。我的想法是每天分别从所有过滤的日子中获取绘图。mutate_impl.data,dots中出错:列“plotX”的长度必须为288组大小或1,而不是105423如果我认为正确的话,您的绘图绘制的是时间和X,而不是X和Y,但这不是主要问题。看起来函数过滤器有一些限制,我的数据库太大了,不适合它?另外,我的想法是每天单独生成绘图,并使用过滤后的数据全局生成每天的绘图。过滤器impl.data中出错,quo:结果的长度必须为288,而不是105423 dimdf的输出是什么?数百万将是巨大的…您看到的错误表明您的筛选规则是错误的,因为提供给您的TRUE/FALSE的输出与您的数据长度不同。每天有约250次,每天从0开始到约250次,仅包含此数字。整个数据库约10万个records@Shag这不算大。你可以跳过这一行“过滤器!重复时间`
df %>%
  group_by(Month, Day) %>%
  filter(!duplicated(Time)) %>% 
  filter(x<=max(x) & Time <= Time[x == max(x)]) %>% 
  ggplot(aes(Time, x, color = interaction(Month, Day))) + 
   geom_line() + 
   geom_point(data=. %>% filter(x == max(x)))