繁体   English   中英

如果两列具有相同的值,如何将第三列中的 NA 替换为 R 中的该值?

[英]If two columns have the same value, how can I replace NA in a third column with this value in R?

我正在处理数据,其中参与者的性别已在三列(基线、第一个时间点和第二个时间点)中注明。 对于数百名参与者,他们在基线和第二个时间点的性别没有改变,但在第一个时间点是 NA。

如果在(基线)之前和之后(第二个时间点)的列中存在相同的值(1=男性,2=女性),我正在尝试导出正确的代码来更改此列中的 NA。 我的知识很基础,因为我目前正在学习 R。

请问有人可以建议一些可能有效的代码吗? 我试图找出一个带有 if/else 语句的 for 循环,但还没有完全实现。

df$tp1 是第一个时间点,df$base 是基线,df$tp2 是第二个时间点

   for(i in df$tp1) {
       if (df$base == df$tp2) 
           df <- replace(df$tp1, df$tp1 =="NA", df$base)
       else (df$tp1 == df$tp1)}
   print(df)

编辑:请在下面找到数据示例

     Baseline          TP1               TP2
        1               NA                1
        1               1                 1
        2               NA                2
        1               1                 1
        1               1                 1
        2               2                 2

在第 1 行和第 3 行中,我希望能够将 NA 更改为与基线和第二个时间点相同的数字,即在这些行中分别为 1 和 2。

 dput(head(gender_only, 15))
 structure(list(Baseline = c(1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 
 1L, 1L, 1L, 2L, 2L, 2L), `First-timepoint` = c(NA, 1L, NA, 1L, 
 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L), `second-timepoint` =     c(1L,1L, 2L, NA, 1L, 1L, NA, 1L, 1L, 1L, 1L, 1L, 2L, 2L, NA)),         row.names = c(NA, 
  15L),     class = "data.frame")

您可以尝试使用dplyr包中的mutatecase_when 来自case_when文档:“此函数允许您向量化多个 if 和 else if 语句。”

#if you haven't installed it yet
#install.packages('dplyr')

df <- df %>%
      mutate(TP1 = case_when(Baseline == TP2 ~ TP2),
             TRUE ~ TP1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM