【问题标题】:Recode into new variable conditional on values in two other variables根据其他两个变量中的值重新编码为新变量
【发布时间】:2018-08-28 02:10:09
【问题描述】:

我希望能够根据两个现有变量中的特定值创建一个新变量。我的数据框看起来像:

structure(list(id = structure(c(1L, 2L, 3L, NA, NA, NA), .Label = c("blue", 
"red", "yellow"), class = "factor"), value = c(-4.3, -2.5, -3.6, 
NA, NA, NA)), .Names = c("id", "value"), row.names = c(NA, -6L
), class = "data.frame")

我想创建一个新列,其中仅包含那些与蓝色有关的值(例如 4.2)。所有其他值都会导致 NA,如下所示:

structure(list(id = structure(c(1L, 2L, 3L, NA, NA, NA), .Label = c("blue", 
"red", "yellow"), class = "factor"), value = c(-4.3, -2.5, -3.6, 
NA, NA, NA), newvalue = c(-4.3, NA, NA, NA, NA, NA)), .Names = c("id", 
"value", "newvalue"), row.names = c(NA, -6L), class = "data.frame")

我尝试了以下方法:

b1 <- dat$id=="blue"
dat$newvalue <- dat$value[b1]

但这会用相同的值 (-4.3) 填充新列中的每个单元格。

【问题讨论】:

    标签: r recode


    【解决方案1】:

    由于NA 的存在,直接使用索引分配值变得很棘手。我们可以使用replace 代替将任何非“蓝色”value 替换为NA。

    dat$newvalue <- replace(dat$value, dat$id != "blue", NA)
    
    dat
    #      id value newvalue
    #1   blue  -4.3     -4.3
    #2    red  -2.5       NA
    #3 yellow  -3.6       NA
    #4   <NA>    NA       NA
    #5   <NA>    NA       NA
    #6   <NA>    NA       NA
    

    等效的ifelse 语句是:

    dat$newvalue <- ifelse(dat$id != "blue", NA, dat$value)
    

    【讨论】:

      猜你喜欢
      • 2019-10-30
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多