【发布时间】:2022-02-04 03:38:24
【问题描述】:
假设我有以下数据框:
library(tidyverse)
# generate data frame
id <- c(1,1,1,1,2,2,3,4,5,5,5,5,1,1,1,1) # User ID
date <- c("2021-12-26", "2021-12-19", "2021-12-15", "2021-12-07", "2021-11-11", "2021-11-05", "2021-09-17","2021-09-17", "2021-10-08", "2021-10-06", "2021-10-01", "2021-09-30", "2022-01-30", "2022-01-24", "2022-01-18", "2022-01-13") # Date the form was submitted
variable1 <- c(10, NA, NA, NA, 8, NA, 7, 6, 9, NA, NA, NA, 6, 8, NA, NA)
variable2 <- c(5,2,3,4,6,7,8,9,1,4,3,2,5,6,5,4)
sample_data <- data.frame(id, date, variable1, variable2)
sample_data <- sample_data %>%
mutate(date=as.Date(date, format="%Y-%m-%d"))
# id date variable1 variable2
#1 1 2021-12-26 10 5
#2 1 2021-12-19 NA 2
#3 1 2021-12-15 NA 3
#4 1 2021-12-07 NA 4
#5 2 2021-11-11 8 6
#6 2 2021-11-05 NA 7
#7 3 2021-09-17 7 8
#8 4 2021-09-17 6 9
#9 5 2021-10-08 9 1
#10 5 2021-10-06 NA 4
#11 5 2021-10-01 NA 3
#12 5 2021-09-30 NA 2
#13 1 2022-01-30 6 5
#14 1 2022-01-24 8 6
#15 1 2022-01-18 NA 5
#16 1 2022-01-13 NA 4
# get the date from entries with variable1
sample_data <- sample_data %>%
mutate(date2=as.Date(ifelse(!is.na(variable1),paste(date,sep=""), NA)))
其中每一行是一个单独的条目(例如一个表单提交),id对应于用户id(对用户来说是唯一的,但每个用户可能有多个条目), date 是输入的日期,variable1 和 variable2 是两个不同的变量——而 variable2 是必需的(即没有缺失值),variable1 不是。
我想比较 variable1 和 variable2 在 variable1 之前的 4 周内每个用户,只要有在这 4 周内,每周至少有一个条目。我对如何做到这一点感到有些困惑。
基本上,我认为我应该为具有至少一个有效 variable1 条目的用户过滤数据框,从该条目(date2 列)中获取日期,然后获取此日期前 28 天(7 天 × 4 周)的所有条目。最后,因为我只对这 28 天内至少每周有一个条目的用户的数据感兴趣,我需要过滤那些至少有一个条目的用户date2 到 date2 - 7 天 范围的条目,date2 - 7 到 date2 - 14 范围内的一个条目,date2 - 14 到 date2 的一个条目- 21 范围,以及 date2 - 21 到 date2 - 28 范围的一个条目。
问题是,我“仅”使用 R 几个月,我不知道如何在代码方面解决这个问题。
有人知道最好的方法吗?
提前致谢
【问题讨论】:
-
3 个澄清问题 - 1) 当您说“每个用户在变量 1 之前的 4 周内”时,您的意思更准确。 2) “在这 4 周中,每周至少有一个条目” - 您的意思是 variable1 至少有一个条目吗?和3)我不明白
sample_data有什么用来解决这个问题。 -
@ValeriVoev:谢谢。这是模拟数据,实际数据集包含我无法公开发布的私人用户数据。这来自用户可以随时填写的在线表格。一些用户每天填写表格,而其他人每周只填写一次,等等。V1 询问用户他们在过去 4 周内的“感觉”如何。 V2 询问用户他们对“今天”的感受。我想研究 V1 和 V2 之间的相关性、响应性等。因为 V1 以 4 周为周期,所以我需要从 V1 关注的每周中筛选出至少有一些 V2 数据(即至少 1 个条目)的用户。这有帮助吗?