我希望能够基于两个现有变量中的特定值创建一个新变量。我的数据框看起来像:
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)填充新列中的每个单元格。
答案 0 :(得分:0)
由于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)