我正在尝试使用以下数据集将NA值重新编码0为列的子集:
set.seed(1)
df <- data.frame(
id = c(1:10),
trials = sample(1:3, 10, replace = T),
t1 = c(sample(c(1:9, NA), 10)),
t2 = c(sample(c(1:7, rep(NA, 3)), 10)),
t3 = c(sample(c(1:5, rep(NA, 5)), 10))
)
Run Code Online (Sandbox Code Playgroud)
每行都有一定数量的试验(1-3之间),由trials列指定.列t1-t3表示每个试验的分数.
试验次数表示NA应将s重新编码为的列的子集0:NA在试验次数内的s表示缺失数据,并且应该被重新编码为0,而NA在试验次数之外的s没有意义,并且应该保留为NAs .因此,对于一行,其中trials == 3一NA列t3将被重新编码为0,但在一行中trials == 2,一个NAin t3将保持为NA.
所以,我尝试使用这个功能:
replace0 <- function(x, …Run Code Online (Sandbox Code Playgroud) 我有一个数据集,其中包含多个嵌套在个体中的观察结果。此示例数据集包括 id 和一周中的某天(dayweek,1-7)的列。我有来自每个人 3 天的观察结果。因此,一个人可能只提交了星期日/星期三/星期四 (1, 4, 5) 的报告,而另一个人可能提交了星期日/星期一/星期二 (1, 2, 3) 的报告,如下例所示:
df <- data.frame(
id = c(rep(1:2, each = 6),2),
dayweek = c(rep(c(1, 4, 5), each = 2),rep(c(1, 2, 3), each = 2), 3)
)
Run Code Online (Sandbox Code Playgroud)
我想设置一个列来标记每个人的第一天、第二天和第三天,如下所示:
df2 <- data.frame(
id = c(rep(1:2, each = 6),2),
dayweek = c(rep(c(1, 4, 5), each = 2),rep(c(1, 2, 3), each = 2), 3),
daynum = c(rep(1:3, each = 2, times = 2), 3)
)
Run Code Online (Sandbox Code Playgroud)
我尝试使用
df %>% group_indices(id, dayweek)
Run Code Online (Sandbox Code Playgroud)
但这会为每个单独的日期组合生成一个新的 ID。有什么好方法可以做到这一点?
提前致谢!