r - for 循环以替换以下一个变量为条件的缺失案例(将不胜感激 tidyverse 解决方案)
问题描述
与往常一样,我在检查了大量有关编码的信息后来到这里。让我解释一下我现在面临的情况:我正在研究旨在了解儿童发展的心理规模。在这个量表中,我们不可能遗漏案例,只有 0、1 或 2 个。不幸的是,人们用缺失编码了一些值,我正在努力解决这个问题。
所有缺失的案例必须符合以下标准:
如果缺少实际变量并且 如果 下一个变量是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 环境解释这一点,我会很高兴。
非常感谢!
编辑:如果您在这里查看答案,欢迎您!但是您也可以使用Function / Loop 将 NA 替换为 R 中相邻列中的值。非常感谢!
解决方案
可能我们需要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
推荐阅读
- ios - 使用 CloudKit 查询以及 tableview 方法 (numberOfRowsInSection) 可能被调用的次数无法预测的事实
- php - 如何使用php电子邮件发送带有附件的电子邮件
- vba - 使用带有 Word FormatFont 对话框的 VBA 更改内容控制文本名称
- c++ - 为什么我的全局变量似乎没有改变?
- r - ggplot2 绘图函数使用 rpy2 返回 NoneType 对象
- xcode - 了解 Xcode 组和文件夹引用之间的区别
- linux - 当 cut 命令没有返回任何值时返回零
- r - 按连续条件过滤行 - 分组依据
- asp.net - 无法返回内存流中生成的word文档供下载给用户
- excel - 当有2个姓氏时,如何将名字和姓氏分成两列