とのデータフレームにリストを変換:私はこのようなリストを持っている特定のタイトル
$20
[1] 500
$30
[2] 600
私はあなたが解決するためにdo.call
を使用することができ、この
id values
20 500
30 600
とのデータフレームにリストを変換:私はこのようなリストを持っている特定のタイトル
$20
[1] 500
$30
[2] 600
私はあなたが解決するためにdo.call
を使用することができ、この
id values
20 500
30 600
のようなデータフレームにこれを変換したいです問題:
li <- list(`20`=500,`30`=600)
df <- data.frame(Values = do.call("rbind",li))
df$Id <- rownames(df)
rownames(df) <- NULL
df <- df[,c(2,1)]
df
出力:
あなたが行うことができます> df
Id Values
1 20 500
2 30 600
:
L <- list(`20`=500,`30`=600)
df <- data.frame(id=names(L), values=sapply(L, function(x) x[1]))
# > df
# id values
# 20 20 500
# 30 30 600
または少しトリッキー:
df <- data.frame(id=names(L), values=sapply(L, '[', 1))
今私は長いベクトル(および最初の要素だけを取る)を考えていたティル。 (コメントをアブドゥにTHX)短い溶液(リストの各要素は1つだけ要素ベクトルの場合)しかし、あなたのケースである:
df <- data.frame(id = names(L), values = unlist(L))
purrrの*_df
機能は、リスト上の機能を反復処理し、簡素化データフレーム。 purrr、あなたがmap2
に2番目の変数として名を渡すことができ
library(purrr)
l <- list(`25` = 900, `26` = 500)
l %>% imap_dfr(~data.frame(id = as.integer(.y),
value = .x))
#> id value
#> 1 25 900
#> 2 26 500
またはCRANと:開発版を使用すると、第二の可変.y
として名またはインデックスを使用して新しいimap
バリアントを使用することができます。 reshape2
パッケージからmelt
機能を使用して同じことを達成するために
l %>% map2_df(names(.),
~data.frame(id = as.integer(.y),
value = .x))
#> id value
#> 1 25 900
#> 2 26 500
簡単な方法。
library(reshape2)
l = list('20'=500, '30'=600)
melt(as.data.frame(l, check.names = F))
出力:
variable value
1 20 500
2 30 600
任意のパッケージ
ls = list('20' = 500, '30' = 600, '40' = 400)
d = data.frame('id' = row.names(as.array(unlist(ls))), 'value' = unlist(ls),row.names = 1:length(ls))
出力
id value
1 20 500
2 30 600
3 40 700
4 50 800
非公開に関数を使用するを使用しない代替的なアプローチ。
L = list(`20`=500,`30`=600)
df = unlist(L)
ベクターを返します。あなたはdata.frameをしたい場合:
df = as.data.frame(t(unlist(L)))
出力:
> df
20 30
1 500 600
ここMap
l <- list(`20`=500,`30`=600)
do.call(rbind,Map(data.frame,id=names(l),values=l))
id values
20 20 500
30 30 600
うがない 'データと解決策です。フレーム(id = names(L)、values = unlist(L)) 'はより短くなりますか? – Abdou
はい、素晴らしい解決策です。私は長いベクトルについて考えていました(最初の要素のみを取ります)。 – jogo