检查值列表和R中的列条目之间是否匹配

时间:2019-04-30 13:22:20

标签: r dataframe

我有一个数据集,其中的列Disease包含字符串值。我还列出了一些罕见疾病的名字rare_disease

我想检查列Disease的每个单元格是否包含列表rare_disease中的元素,如果包含,则在我的数据框中创建一个新列并给出值1到该条目。

我尝试使用ifelse函数,如下所示:

FinalData$RareDisease <- ifelse(rare_disease %in% FinalData$Disease,1,0)

但是我想这会检查两个变量中的对应行是否相同,因此会引发错误。相反,我希望对Disease的每个单元格与rare_disease的每个单个元素进行检查,如果有道理。

我也按照Test if a vector contains a given element的建议尝试了matchis.element(),但是它们也不起作用。

2 个答案:

答案 0 :(得分:0)

您几乎是正确的,但您应该翻转它:

FinalData$RareDisease <- ifelse(rare_disease %in% FinalData$Disease,1,0)

答案 1 :(得分:0)

这是一个可重现的示例/解决方案-请注意,您可以只使用as.numeric而不是ifelse

df <- data.frame(
  idx = 1:10,
  Disease = letters[1:10]
)
rare_disease <- letters[c(1, 5, 9)]

df
#>    idx Disease
#> 1    1       a
#> 2    2       b
#> 3    3       c
#> 4    4       d
#> 5    5       e
#> 6    6       f
#> 7    7       g
#> 8    8       h
#> 9    9       i
#> 10  10       j
rare_disease
#> [1] "a" "e" "i"

df$RareDisease <- as.numeric(df$Disease %in% rare_disease)
df
#>    idx Disease RareDisease
#> 1    1       a           1
#> 2    2       b           0
#> 3    3       c           0
#> 4    4       d           0
#> 5    5       e           1
#> 6    6       f           0
#> 7    7       g           0
#> 8    8       h           0
#> 9    9       i           1
#> 10  10       j           0

reprex package(v0.2.1)于2019-04-30创建