私は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"]ため)。ooz
私は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に入力します。y1y[z , colX][z , colX_rr]0df$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:col31 つの文字のみがあり、各参加者 (行) に対して 1 回だけ出現します。列 range col1_rr:の内容col3_rrはかなり乱雑で、長さの異なる文字列が含まれていますが、各文字も各行に 1 回しか存在しません。
NAs も表にあることに注意してください。
実際のデータには 50 列あるため、これを自動化したいのです。ただし、必要に応じて、列ごとに個別のスクリプト行を記述できます。
実際のデータの文字は range からのものletters[1:14]であるため、最後に 14 個の新しい列しかなく、それぞれに値 0 または 1 (またはTRUE/ FALSE、これによりソリューションが簡単になる場合) が含まれます。
私は試してみましたがifelse、mergeこのような複雑なルールのために、この問題に対してそれらを機能させる方法がわかりません。
ありがとう!