r - R:如何在特定条件下替换 NA 值
问题描述
每个人。对于同一参与者,我想将 NA 值替换为不是 NA 的值。我试过这个,但它返回原来的df,我不知道发生了什么。
df = data.frame(block = c('1',NA,NA,'2',NA,NA,'3',NA,NA),
subject = c('31','31','31','32','32','32','33','33','33'))
df[df$subject == 1 & is.na(df$block)] = df[df$subject == 31 &!is.na(df$block)]
# define a for loop with from 1 to n
for (i in 1: length(unique(df$subject))){
subjects
# replace the block with NA in block that is not NA for the same participant
df[df$subject == i & is.na(df$block)] = df[df$subject == i & !is.na(df$block)]
}
这是我想要得到的。 在此处输入图像描述
解决方案
使用 dplyr 和 zoo 库,我将 block 列中的 NA 值替换为之前的非 NA 行值:
library(dplyr)
library(zoo)
df2 <- df %>%
do(na.locf(.))
最终结果如下所示:
df2
block subject
1 1 31
2 1 31
3 1 31
4 2 32
5 2 32
6 2 32
7 3 33
8 3 33
9 3 33
推荐阅读
- flutter - 将带有多个子项的 RichText 绑定到 SingleChildScrollView
- php - 如果没有插入图像,则不更新字段
- javascript - 新手开发人员 - php 联系表单模板的问题 - 可能有些愚蠢
- javascript - 在 Firebase 中创建用户给我一个错误
- git - 如何在 maven-release-plugin 发布期间将标签合并到主分支?
- c# - 从 C# 开发人员的角度理解 MatLab 数组裁剪和运算符:例如 data(1:4:end,:,:);
- ansible - 将变量传递给 Jinja2 模板文件的正确 Ansible 语法
- c++ - C ++ boost,等待来自不同线程的var init
- cmd - 如何在控制台应用程序中将输入作为输入发送
- c++ - 调用迭代函数的次数