我是R的新手并且不知道在哪里寻找这个,所以如果这是一个超级愚蠢的问题,请道歉。
我有一个包含以下变量的数据集:
month day group Y
id
1 11 29 1 0
2 11 29 0 0
3 11 29 0 1
4 11 30 1 1
5 11 30 0 1
6 12 01 1 0
7 12 01 0 0
8 12 02 1 0
9 12 02 0 1
....................
98 12 30 0 1
99 12 30 1 0
为此,我想打印一个情节
month
和day
组成),group = 0
,另一行用于group = 1
,显示Y
比例。我认为这很简单,但由于我很新,我不知道如何(i)将月份/日期转换为(我认为是)ggpolt2
可以解释的内容和(ii)绘制每组每天的比例。
非常感谢任何帮助!非常感谢! :)
答案 0 :(得分:1)
这里是R中基函数的答案。你的问题意味着你需要ggplot2,当然你可以用它来绘制这样的情节,但基础图形也会解释日期。
set.seed(25)
创建一个类似于您的可重现数据框:
df <- data.frame(id = 1:100,
month = floor(runif(100, 10,12)),
day = floor(runif(100,1,10)),
group = rbinom(100, 1, 0.5),
Y = rbinom(100, 1, 0.5))
df
创建日期列,您需要一年的日期,您可以添加额外的列或使用固定年份
df$date <- as.Date(paste(df$day, df$month, "2018", sep = "-"), format = "%d-%m-%Y")
计算每组的比例并存储为新对象
res <- aggregate(df$Y, list(df$group,df$date), mean)
设置绘图区域
plot(res$Group.2, res$x, type = "n", xlab = "Date", ylab = "Proportion")
绘制每一行
with(res[res$Group.1 == 0,], lines(Group.2, x, lty = 1))
with(res[res$Group.1 == 1,], lines(Group.2, x, lty = 3))
添加图例
legend("top", lty = c(1,3), legend= c("Group 0", "Group 1"), bty = "n")
如果你想在ggplot中这样做,那么你可以这样做:
library(ggplot2)
ggplot(res, aes(x = Group.2, y = x, color = as.factor(Group.1))) +
geom_line()
答案 1 :(得分:0)
这里的想法是使用数据表进行计算。 首先是设置日期格式(我在这里选择posixct)
library(data.table)
library(ggplot2)
plouf <- setDT(plouf)
plouf[,Date := as.Date(paste0(month," ",day),format = "%m %d")]
创建一个每天Y之和的列后,只是因为在
之后计算比例很方便plouf[,sumy := sum(Y), by = Date]
然后我计算出每组的比例
plouf[group == 1, ratio := ifelse(sumy != 0, sum(Y)/sumy,0), by = Date]
plouf[group == 0, ratio := ifelse(sumy != 0, sum(Y)/sumy,0), by = Date]
这是gplot
的结果ggplot(data = plouf, aes(Date,ratio,color = as.factor(group) )) +
geom_line()
数据
plouf <- read.table(text ="
id month day group Y
1 11 29 1 0
2 11 29 0 0
3 11 29 0 1
4 11 30 1 1
5 11 30 0 1
6 12 01 1 0
7 12 01 0 0
8 12 02 1 0
9 12 02 0 1", header = T)
答案 2 :(得分:0)
这样的东西?
df <- data.frame(id = 1:200,
month = sample(10:12, 200, replace = T),
day = sample(1:30, 200, replace = T),
group = rbinom(200, 1, 0.5),
Y = rbinom(200, 1, 0.5))
df <- df %>%
mutate(Date = as.POSIXct(paste(month, day), format = "%m %d")) %>%
arrange(Date)
df %>% group_by(Date, group) %>%
summarise(n = length(unique(Y))) %>%
mutate(pct = n / 2) %>%
ggplot(aes(Date, pct, group = group, color = as.factor(group))) +
geom_line()