【问题标题】:Looping through a column and returning value遍历列并返回值
【发布时间】:2020-06-18 03:39:43
【问题描述】:

我想遍历我的数据框中的一列并检查一个条件,然后替换 0 或 1。代码是:

for (i in v$R){
     if( is.na(v$R) ==TRUE ){v$V5 = 0}else{v$V5=1}
}

但是我得到一个错误。名为“v”的数据框如下。 V5 有 NA 值,如果 R 列中的值为 NA,我想用 0 替换,否则用 1 替换。我该怎么做?

A B R V5
1 2 3 NA
4 5 NA NA

【问题讨论】:

    标签: r loops dataframe if-statement na


    【解决方案1】:
    • 您可以尝试ifelse,如下所示
    df <- within(df,V5 <- ifelse(is.na(R),0,1))
    

    +(将逻辑值转换为数值)

    df <- within(df,V5 <- +!is.na(R))
    

    这样

    > df
      A B  R V5
    1 1 2  3  1
    2 4 5 NA  0
    
    • 如果你想使用循环,你可以试试
    for (i in seq_along(df$R)){
      if( is.na(df$R[i]) ==TRUE ){df$V5[i] = 0}else{df$V5[i]=1}
    }
    

    数据

    df <- structure(list(A = c(1L, 4L), B = c(2L, 5L), R = c(3L, NA), V5 = c(NA, 
    NA)), class = "data.frame", row.names = c(NA, -2L))
    

    【讨论】:

    • @R_mad 欢迎您。我还添加了for 循环答案。如果您认为我的回答有帮助,请随时点赞/接受。谢谢!
    • 我想检查值是否属于一列,然后将值 0 或 1 返回到默认情况下具有 NA 值的另一列。你能看看我下面的代码: for (i in seq_along(df)){ if( i %in% df$x ){df$V5[i] = 0}else{df$V5[i]=1} } @ThomasIsCoding
    • @R_mad 您能否为您的问题创建另一个帖子,如果您不提供一些示例或预期结果,我将无法完全理解新问题
    【解决方案2】:

    试试这个:

    v$V5 <- ifelse(is.na(v$R), 0, 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      相关资源
      最近更新 更多