【问题标题】:How do I replace NA values in Column B with opposite value of column A如何用 A 列的相反值替换 B 列中的 NA 值
【发布时间】:2021-06-10 23:52:00
【问题描述】:

我有一个大型数据集。其中两列包含“是”和“否”值。 Column.A 的 NA 值为 0,而 Column.B 的 NA 值约为 40%,数据集包含 500 行,其中 Col.B 与 Col.A 相反

示例列

Col.A          Col.B
Yes             No
Yes             NA
No              Yes
No              yes
Yes             No
No              NA

我想用 Col.A 的相反值替换 Col.B 中的所有 NA 值

我一直在尝试使用 for 循环根据 Col.A 值替换所有 Col.B

for (j in 1:500)
{
  if (Col.A == YES )
  {
    Col.B = "NO "
  }
  else
  {
    Col.B = "YES "
  }
}

但是 IF 语句返回 'YES' not found

【问题讨论】:

  • 为了帮助其他人回答这个问题,您可能需要提供用于生成示例列的代码。另外,您确定要if (Col.A == YES ) 而不是if (Col.A == "YES" )

标签: r if-statement na


【解决方案1】:

你可以这样做:

#Convert the columns to characters
df[] <- lapply(df, as.character)
#Change NA and A = 'Yes' to 'No'
df$B[is.na(df$B) & df$A == 'Yes'] <- 'No'
#change remaining values to 'Yes'
df$B[is.na(df$B)] <- 'Yes'

【讨论】:

    【解决方案2】:

    您可以为此使用 ifelse。

    字符串

    df$B<-ifelse(is.na(df$B), ifelse(df$A=="YES ", "NO ", "YES "), df$B)
    
    
    df<-data.frame(A=c("Yes", "Yes", "No", "No", "Yes","No"), B=c("No", NA, "Yes", "Yes", "No", NA))
    > 
    > df
        A    B
    1 Yes   No
    2 Yes <NA>
    3  No  Yes
    4  No  Yes
    5 Yes   No
    6  No <NA>
    > 
    > df$B<-ifelse(is.na(df$B), ifelse(df$A=="Yes", "No", "Yes"), df$B)
    > 
    > df
        A   B
    1 Yes  No
    2 Yes  No
    3  No Yes
    4  No Yes
    5 Yes  No
    6  No Yes
    

    因素

    df<-data.frame(A=c("Yes", "Yes", "No", "No", "Yes","No"), B=c("No", NA, "Yes", "Yes", "No", NA), stringsAsFactors = TRUE)
    > 
    > df
        A    B
    1 Yes   No
    2 Yes <NA>
    3  No  Yes
    4  No  Yes
    5 Yes   No
    6  No <NA>
    > 
    > df$B[is.na(df$B)]<-as.factor(ifelse(df$A[is.na(df$B)]=="Yes","No", "Yes" ))
    > 
    > df
        A   B
    1 Yes  No
    2 Yes  No
    3  No Yes
    4  No Yes
    5 Yes  No
    6  No Yes
    

    【讨论】:

    • 使用时,B 列变为包含“YES”或“1”的字符串列 Col.B 显示为“YES”“YES”“1”“YES”“1”“1” “是” “1” “1” “1” “1” “1” “1”
    • 我已更新答案以显示我使用您的示例数据时得到的结果。
    • 另一个更新,当你有因子而不是字符串时有效。
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2017-04-22
    • 2019-06-27
    • 2018-06-18
    • 2023-01-19
    • 2015-07-28
    • 1970-01-01
    相关资源
    最近更新 更多