从列中找出全年每天的最大数量,并在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)))