私はRを始めたばかりで、かなりうまくやっていますが、これは私を殺しました! :)
私はデータフレームを持っています:
df <- data.frame(
col1=letters[1:5],col2=c(NA,letters[4:1]),col3=letters[11:15],
col1_rr=letters[15:11], col2_rr=letters[2], col3_rr=c(letters[11:14], "oz"))
次のようになります。
col1 col2 col3 col1_rr col2_rr col3_rr
1 a NA k o b k
2 b d l n b l
3 c c m m b m
4 d b n l b n
5 e a o k b oz
列名のパターンに注意してください。各列colX
には、 に相当するものがありcolX_rr
ます。
df[1,"col1"]
ここで、 の内容が に含まれているかどうかを確認したいと思いdf[1,"col1_rr"]
ます。
たとえば、このステートメントは については false ですdf[1,"col1"]
が、すべてのcol3
セルについては true です (は に含まれているdf[5,"col3"]
ため)。o
oz
私はgrepl
そのために使用できることを知っています:
> grepl(df[1,"col3"], df[1,"col3_rr"])
[1] TRUE
> grepl(df[2,"col1"], df[2,"col1_rr"])
[1] FALSE
> grepl(df[1,"col2"], df[1,"col2_rr"])
[1] NA
> grepl(df[5,"col3"], df[5,"col3_rr"])
[1] TRUE
そして次:一般的に言えば、y
からの文字[z , colX]
が同等のセルに含まれている場合、新しい列を作成し、指定された行に入力し[z , colX_rr]
たいと思います。文字fromが同等の文字に含まれていない場合は、 inに入力します。y
1
y
[z , colX]
[z , colX_rr]
0
df$y
したがって、最終的には次のようになります。
col1 col2 col3 col1_rr col2_rr col3_rr a b (...) k(...)
1 a NA k o b k 0 0 1
2 b d l n b l 0 0 0
3 c c m m b m 0 0 0
4 d b n l b n 0 1 0
5 e a o k b oz 0 0 0
列範囲の各セルにはcol1:col3
1 つの文字のみがあり、各参加者 (行) に対して 1 回だけ出現します。列 range col1_rr
:の内容col3_rr
はかなり乱雑で、長さの異なる文字列が含まれていますが、各文字も各行に 1 回しか存在しません。
NA
s も表にあることに注意してください。
実際のデータには 50 列あるため、これを自動化したいのです。ただし、必要に応じて、列ごとに個別のスクリプト行を記述できます。
実際のデータの文字は range からのものletters[1:14]
であるため、最後に 14 個の新しい列しかなく、それぞれに値 0 または 1 (またはTRUE
/ FALSE
、これによりソリューションが簡単になる場合) が含まれます。
私は試してみましたがifelse
、merge
このような複雑なルールのために、この問題に対してそれらを機能させる方法がわかりません。
ありがとう!