【发布时间】:2023-03-21 18:23:01
【问题描述】:
我想将 1 分配给包含名称的那个,将 0 分配给缺少的那个。 我尝试使用 ifelse,但无法使其运行。感谢您的帮助。
Individual <- c("Jeff","NA","John","NA","NA")
Outcome: 1 0 1 0 0
【问题讨论】:
我想将 1 分配给包含名称的那个,将 0 分配给缺少的那个。 我尝试使用 ifelse,但无法使其运行。感谢您的帮助。
Individual <- c("Jeff","NA","John","NA","NA")
Outcome: 1 0 1 0 0
【问题讨论】:
您实际上并不需要ifelse,因为您可以将逻辑值转换为整数。使用:
Individual <- c("Jeff","NA","John","NA","NA")
result <- as.integer(Individual != 'NA')
result
#[1] 1 0 1 0 0
但是,如果您有实际的NA 值而不是字符串"NA",我们可以使用is.na 进行检查。
Individual <- c("Jeff",NA,"John",NA,NA)
result <- as.integer(!is.na(Individual))
result
#[1] 1 0 1 0 0
【讨论】:
也可以使用ifelse:
Individual <- c("Jeff","NA","John","NA","NA")
ifelse(Individual == "NA", 0L, 1L)
#> [1] 1 0 1 0 0
或者按照 Ronak 的建议NA:
Individual <- c("Jeff", NA, "John", NA, NA)
ifelse(is.na(Individual), 0L, 1L)
#> [1] 1 0 1 0 0
我认为ifelse 解决方案更易于阅读。另一方面,Ronaks 解决方案要快得多(即大约 10 倍)。
由reprex package (v1.0.0) 于 2021-02-07 创建
【讨论】: