2017-09-14 6 views
0

私はデータフレームdfを持っています。既存の列とそれに対応するリスト値を使用してデータフレーム列を追加する

V1 V2 V3 
A 1 3 
A 2 8 
B 4 12 
C 3 2 
R 8 9 

私もマップとして働くリストlstを持って、私はリストへのインデックスとして文字列を渡すことができますし、それが文字列値を返します。例えば。私が欲しいもの

lst[["A"]] => "AB" 
lst[["B"]] => "BA" 
lst[["C"]] => "FE" 
lst[["R"]] => "WE" 

は、既存の列に関連してdfための新しい列を作成することです。 dfの最初の列は、リストのキー索引として機能し、新しい列の同じ行でそれぞれの値を返します。私はで終わるしたい

V1 V2 V3 V4 
A 1 3 AB 
A 2 8 AB 
B 4 12 BA 
C 3 2 FE 
R 8 9 WE 

はまた、私は違うとエレガントな解決策を見たいので、私の実際のデータはまた、非常に大規模であることから、forループを回避したいです。 上記を行う方法はありますか?

ありがとうございます。 dplyrを使用して

+1

。つまり、コードをコピーして貼り付け、実行してサンプルデータを作成し、サンプルコードを見ることができるはずです。 https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

答えて

2
dat = read.table("clipboard", header = TRUE) 

lst = list("AB", "BA", "FE", "WE") 
names(lst) = c("A", "B", "C", "R") 

dat$V4 = lst[dat$V1] 

> dat 
    V1 V2 V3 V4 
1 A 1 3 AB 
2 A 2 8 AB 
3 B 4 12 BA 
4 C 3 2 FE 
5 R 8 9 WE 
+0

これは私が探していたものです。私はdat $ V4 < - lst [[dat $ V1]]の代わりに二重括弧を使用していました。違いを説明し、なぜそれが単一のかっこで動作するのか教えてください。ありがとうございます – user159941

+0

@ user159941うれしいです。 https://stackoverflow.com/questions/1169456/the-difference-between-and-notations-for-accessing-theelements-of-a-lisには、それに関するかなり詳細な回答があります。 – Kristofersen

0

:あなたは常に再現性、実行可能な方法であなたのデータを作成してください(特に `r`タグ内)の例を作成

df%>%mutate(V4=lst[V1]) 

# V1 V2 V3 V4 
#1 A 1 3 AB 
#2 A 2 8 AB 
#3 B 4 12 BA 
#4 C 3 2 FE 
#5 R 8 9 WE 
関連する問題