キュレーターがリレーショナル データベースと 1 対多の関係を認識していない Excel スプレッドシートからいくつかのデータを読み込んだので、複数の変数を 1 つの列に入れました。
>df <- data.frame(id=c("X1", "X23", "X5"), vars=c("foo, bar, hello", "world", NA), var2=c(1,2,3))
>df
id vars var2
1 X1 foo, bar, hello 1
2 X23 world 2
3 X5 <NA> 3
列を新しいデータ フレームに変換しvars
て、1 対多の関係を持つことができるようにします。
>df
id var2
X1 X1 1
X23 X23 2
X5 X5 3
>df2
id var
1 X1 foo
2 X1 bar
3 X1 hello
4 X23 world
vars
各エントリが変数のベクトルであるリストに列を解析できます。
>library(stringr)
>halfway <- str_split(df$vars, pattern=", ")
>halfway
[[1]]
[1] "foo" "bar" "hello"
[[2]]
[1] "world"
[[3]]
[1] NA
しかし、このリストを取得して long に変換する方法がわかりませんdata.frame
。
いろいろ試してみましたが、各変数が属する ID に関する情報を失うことなく長い形式にすることはできません ( を使用unlist
)。私も見ましreshape
たが、私が望むことをしていないようです。
for ループを使用して新しいテーブルを繰り返し作成することもできますが、それは非常に非効率的です。これに対するエレガントな解決策はありますか?