10

data.frameを変換するにはどうすればよいですか

df <- data.frame(id=c("af1", "af2"), start=c(100, 115), end=c(114,121))

リストのリストへ

LoL <- list(list(id="af1", start=100, end=114), list(id="af2", start=115, end=121))

私は次のようなことを試しました

not.LoL <- as.list(as.data.frame(t(df)))

この後どうなるかはよくわかりませんが、正しくありません。私の要件は、たとえば、startコマンドによって最初にアクセスできることです

> LoL[[1]]$start
[1] 100

私が現在持ってnot.LoLいるものは私に次のエラーを与えます:

> not.LoL[[1]]$start
Error in not.LoL[[1]]$start : $ operator is invalid for atomic vectors

説明および/または解決策をいただければ幸いです。

編集:ここでの「id」は実際には一意ではないことを明確にする必要があります。1つのIDの下に複数の要素が存在する可能性があります。そのため、一意のIDに依存しないソリューションを使用できますsplit

4

5 に答える 5

9
LMAo <- lapply(split(df,df$id), function(x) as.list(x)) # is one way

# more succinctly
# LMAo <- lapply(split(df,df$id), as.list)

あなたのコメントに従って編集されたソリューション:

lapply( split(df,seq_along(df[,1])), as.list)
于 2013-02-06T13:20:19.620 に答える
7

を使用するplyrと、これを行うことができます

dlply(df,.(id),c)

id によるグループ化を避けるために、複数ある場合 (列名を変更する必要があるかもしれません。id は私にとって一意です)

dlply(df,1,c)
于 2013-02-06T13:28:50.983 に答える
7

apply次のように、データ フレームをリストのリストに変換するために使用できます。

LoL <- apply(df,1,as.list)

ただし、これは単一の原子ベクトルを関数に渡すため、すべてのデータをテキストに変更します。

于 2013-02-06T14:27:25.820 に答える