替换A列中的NA,比较A列和列表

时间:2017-12-04 22:03:29

标签: r

我有一个包含两列的data.frame DF。名称和分数。 我有一个包含名称的列表(.list)。有些等于DF $名称中的名称。 我需要在DF $得分中插入一个数字(2000),如果该名称在.list中且得分为NA

数据:

DF.scores <- data.frame(c("steve", "anna", "albert", "john", "sarah", "lily"), c(2000, 1500, NA, NA, NA, 1750))
names(DF.scores) <- c("names", "score")
the.list <- c("anna", "steve", "john")  

我需要数据框最终结果如下:

names   score
steve   2000
anna    1500
albert  NA
john    2000
sarah   NA
lily    1750

我尝试过对数据进行子集化,使用哪个命令但没有结果。

2 个答案:

答案 0 :(得分:1)

我知道这很简单,但是如果你的数据框中已有分数,你可能不想改变,那么很难打败一个简单的ifelse陈述:

DF.scores$score <- with(DF.scores,ifelse(names %in% the.list & is.na(score),yes=2000,no=score))

答案 1 :(得分:1)

考虑使用dplyr::mutate()

dplyr::mutate(DF.scores, score = ifelse(names %in% the.list & is.na(score), 2000, score))

如果满足两个条件,names位于the.list scoreNA,则会将得分设置为2000.

> dplyr::mutate(DF.scores, score = ifelse(names %in% the.list & is.na(score), 2000, score))
   names score
1  steve  2000
2   anna  1500
3 albert    NA
4   john  2000
5  sarah    NA
6   lily  1750