for 循环替换以下一个变量为条件的缺失案例(tidyverse 解决方案将不胜感激)
Loop of for to replace missing cases conditional on the next variable (tidyverse solution will be appreciated)
一如既往,我是在查看了大量有关编码的信息后才来到这里的。
让我解释一下我现在面临的情况:我正在研究旨在获得儿童发展的心理量表。在这个比例中,我们不可能遗漏案例,只有 0、1 或 2。不幸的是,人们用缺失编码了一些值,我正在努力解决这个问题。
所有缺失的个案必须满足以下条件:
如果实际变量缺失 AND
如果下一个变量是2,那么缺失的就是“2”;
如果下一个变量是1,那么缺失的就是“1”,
如果下一个变量是 0,则缺失值将是“0”
脚本中不会包含最后一列。
谈论起来很容易,但编写代码对我来说是个挑战。
我的直觉编码是这样说的:
for (i in 1:ncol(ds)) {
if(is.na(ds[i]) & ds[i+1] == "2") ds[i] == "2"
}
您可以重现的代码是:
ds <- data.frame(x1 = rep(sample(0:2),5),
x2 = sample(0:2),
x3 = sample(0:2),
x4 = sample(0:2))
ds[ds == 0] <- NA
for (i in 1:ncol(ds)) {
if(is.na(ds[i]) & ds[i+1] == "2") ds[i] == "2"
}
澄清一下,我知道 tidyverse(扫帚)在这种情况下非常有用,如果有人能解释一下使用 tidyverse 环境,我会很高兴。
非常感谢!
已编辑:如果您是来这里检查答案的,欢迎!但是你也可以去 。非常感谢!
可能我们需要fill
library(tidyverse)
ds %>%
fill(everything(), .direction = 'up')
如果我们想对每一行都这样做,那么使用apply
library(zoo)
ds[] <- t(apply(ds, 1, function(x) na.locf(x, fromLast = TRUE, na.rm = FALSE)))
或 pmap
pmap(ds, ~ c(...) %>%
as_tibble %>%
fill(value, .direction= 'up')) %>%
bind_cols %>%
t %>%
as_tibble
一如既往,我是在查看了大量有关编码的信息后才来到这里的。 让我解释一下我现在面临的情况:我正在研究旨在获得儿童发展的心理量表。在这个比例中,我们不可能遗漏案例,只有 0、1 或 2。不幸的是,人们用缺失编码了一些值,我正在努力解决这个问题。
所有缺失的个案必须满足以下条件:
如果实际变量缺失 AND 如果下一个变量是2,那么缺失的就是“2”; 如果下一个变量是1,那么缺失的就是“1”, 如果下一个变量是 0,则缺失值将是“0”
脚本中不会包含最后一列。
谈论起来很容易,但编写代码对我来说是个挑战。
我的直觉编码是这样说的:
for (i in 1:ncol(ds)) {
if(is.na(ds[i]) & ds[i+1] == "2") ds[i] == "2"
}
您可以重现的代码是:
ds <- data.frame(x1 = rep(sample(0:2),5),
x2 = sample(0:2),
x3 = sample(0:2),
x4 = sample(0:2))
ds[ds == 0] <- NA
for (i in 1:ncol(ds)) {
if(is.na(ds[i]) & ds[i+1] == "2") ds[i] == "2"
}
澄清一下,我知道 tidyverse(扫帚)在这种情况下非常有用,如果有人能解释一下使用 tidyverse 环境,我会很高兴。
非常感谢!
已编辑:如果您是来这里检查答案的,欢迎!但是你也可以去
可能我们需要fill
library(tidyverse)
ds %>%
fill(everything(), .direction = 'up')
如果我们想对每一行都这样做,那么使用apply
library(zoo)
ds[] <- t(apply(ds, 1, function(x) na.locf(x, fromLast = TRUE, na.rm = FALSE)))
或 pmap
pmap(ds, ~ c(...) %>%
as_tibble %>%
fill(value, .direction= 'up')) %>%
bind_cols %>%
t %>%
as_tibble