创建一个Y变量,它是X变量的计数

3

这是一个简单的问题,所有我找到的答案都是针对更复杂的数据集。

我尝试创建一条线图,其中X轴为日期,Y轴为每个独立的X变量(自动生成的“rownames”)的计数。

已尝试的方法:

ggplot(data=o2outcomes, aes(x=transfusion_date, y=..count.., group=1)) +
  geom_line()

y x   
1 01/01/99 01:01,   
2 01/01/99 02:02,   
3 01/02/99 01:01

代码将经常运行,且会添加新的日期,因此我不能只静态地分配1、2、3作为y变量的数量,它需要成为x轴的计数。

嗨,凯特,你能否使用dput(o2outcomes)命令放置示例数据和所需输出? - Harshal Gajare
c("3/28/20 18:01", "3/28/20 22:16", "4/1/20 19:30", "4/1/20 23:56", "4/10/20 17:36", "4/10/20 20:30") 这是你要的吗?我在这里还很新,谢谢。 - htxepidemiologist
你想将 "3/28/20 18:01" 和 "3/28/20 22:16" 合并在一起吗?因为它们是在同一天,还是保持分开? - Harshal Gajare
每个日期/时间都是一个单独的计数。 - htxepidemiologist
似乎我应该创建一个 x 变量计数的向量。 - htxepidemiologist
3个回答

2

在基础 R 中,使用 y 变量等于每个 x 变量实例数量的图很容易:

plot(table(x))
table()函数创建一个表格,包含x向量中每个值出现次数的向量,每个值都有对应的名称。
要指定折线图,我们使用plot参数type='l',并且我们还可以(可选地)指定y轴限制以确保包括零,使用ylim=。此外,当使用表示日期的字符串向量(通常太长而无法在水平绘制的x轴标签旁边适合),我们可以使用plot参数las=2将x轴标签垂直显示,并且我们可以使用xlab=""删除x轴标题。
总之:
my_dates=c("3/28/20 18:01", "3/28/20 22:16", "4/1/20 19:30", "4/1/20 23:56", "4/10/20 17:36", "4/10/20 20:30","3/28/20 18:01", "3/28/20 22:16")

plot(table(my_dates),type="l",ylim=c(0,2),las=2,xlab="",ylab="# of each date/time")

enter image description here


这太棒了。我遇到了一个错误:Error in plot.window(...) : invalid 'xlim' value我的代码看起来像这样 my_dates=c( "3/28/20 18:01", "3/28/20 22:16", "4/1/20 19:30", "4/1/20 23:56", "4/10/20 17:36" )plot(table(o2outcomes$transfusion_date),type="l",ylim=c(0,2),las=2,xlab="",ylab="1", "2", "3", "4")view(o2outcomes$transfusion_date) - htxepidemiologist
1
my_dates=... 这一部分只是一个演示(我从 @Harshal Gajare 那里偷了一些包含重复日期/时间的演示数据)。 - Dominic van Essen
1
你的 plot 命令中是否包含了 xlim= 参数?如果没有,请尝试使用 plot(table(head(o2outcomes$transfusion_date,10)), xlim=) 再次运行,看看是否还会出现错误(这将表明是否可以使用小数据集重现错误,这样更容易进行故障排除...)。 - Dominic van Essen

1

一开始可能并不像你想象的那么简单。据我所知,使用geom_line没有直接的方法来使用计数变量。因此(正如this answer中建议的那样),最好和最简单的方法是首先创建一个摘要框架。

以下是纯粹的tidyverse方法。

library(tidyverse)
library(lubridate)

dates <- data.frame(x = c("3/28/20 18:01", "3/28/20 22:16", "4/1/20 19:30", "4/1/20 23:56", "4/10/20 17:36", "4/10/20 20:30"))
dates <- 
  dates %>%
  mutate(x = as_date(mdy_hm(x))) %>%
  count(x) 

ggplot(data = dates, aes(x = x, y = n, group = 1)) +
  geom_line()

本文档由 reprex package (v0.3.0) 于2020-05-16创建


谢谢。非常基础的跟进问题:我应该在哪里输入我的数据集名称o2outcomes或变量“date”(o2outcomes $ transfusion_date)? - htxepidemiologist
日期 <- o2outcomes %>% select(transfusion_date) %>% mutate(date = as_date(mdy_hm(transfusion_date))) %>% count(date) - Harshal Gajare

0

尝试以下代码:

library(lubridate)
library(ggplot2)
library(scales)
a<-c("3/28/20 18:01", "3/28/20 22:16", "4/1/20 19:30", "4/1/20 23:56", "4/10/20 17:36", "4/10/20 20:30","3/28/20 18:01", "3/28/20 22:16")
b<-table(a) %>% as.data.frame()
b$a<-mdy_hm(b$a)
ggplot(b,aes(x = b$a, y = b$Freq, group = 1)) + geom_line()+ scale_x_datetime(labels = date_format("%d%b"))

enter image description here


您的聚合似乎出现了故障。 - tjebo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接