2017-12-04 16 views
1

私は2つの列を含むdata.frame DFを持っています。名前とスコア。 私は名前を含むリスト(the.list)を持っています。 DF $名の名前の名前と同じものもあります。列AにNAを置き換え、列Aとリストを比較する

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") 

私が終わるためにデータフレームを必要とする:名前がthe.listにあり、スコアがNA

データであれば、私は、DF $スコアに番号(2000)を挿入する必要があります

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

私はデータをサブセット化しようとしましたが、どのコマンドを使用しても結果は得られませんでした。

+0

... [%のthe.listでDF.scores $名%] < - 2000'交換形 – thelatemail

+0

で、私は上記の提案は、OPのに対処しないと思いますスコアを2000に設定する基準、すなわち、「名前がリストにあり、スコアがNAである場合」である。 –

答えて

1

私はそれは簡単ですが、知っているあなたは、あなたが変更したくない場合がありますすでにデータフレーム内のスコアを持っている場合は、それは簡単なifelse文を打ち負かすのは難しい:

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

この回答は、スコアを2000に設定するためのOPの基準、すなわち「名前がリストにありスコアがNAである場合」に対応していないと思います。 –

+0

@スヌビアンありがとうございました...私は2番目の条件を逃しました。まもなく編集が掲載されます。 – Nate

1

は、このためにdplyr::mutate()の使用を検討してください。

両方の条件が満たされた場合に
dplyr::mutate(DF.scores, score = ifelse(names %in% the.list & is.na(score), 2000, score)) 

このセットは、2000年に得点、namesthe.listscoreであるNAあります。 `DF.scores $スコアである

> 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 
関連する問題