我有一个包含两列的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
我尝试过对数据进行子集化,使用哪个命令但没有结果。
答案 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
且 score
为NA
,则会将得分设置为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