web-dev-qa-db-ja.com

名前付きベクトルをデータフレームに変換

私はこの名前付きベクトルを持っています:

x <-  1:5

names(x) <- c('0 15', '1 15', '2 15', '0 16', '1 16')

xをこのデータフレームに変換する最良の方法は何ですか:

xDF <- data.frame(V1 = c(0, 1, 2, 0, 1), V2 = c(15, 15, 15, 16, 16), V3 = 1:5)
13
luciano

ここに非常に直接的なアプローチがあります:

_cbind(read.table(text = names(x)), x)
     V1 V2 x
0 15  0 15 1
1 15  1 15 2
2 15  2 15 3
0 16  0 16 4
1 16  1 16 5
_

この場合、_read.table_が自動的にnames(x)コンポーネントを分割します(デフォルトではスペースですが、必要に応じて他の文字を指定することもできます)。

xの名前をcbindに直接設定することもできます。

_cbind(read.table(text = names(x)), V3 = x)
_

より直接的なアプローチは、次のように、「splitstackshape」パッケージのcSplitを使用することです。

_library(splitstackshape)
cSplit(stack(x), "ind", " ")
_
16

私はこのようなことをします:

res = data.frame(cbind(do.call('rbind', strsplit(names(x), " ")), x))
res
     V1 V2 x
0 15  0 15 1
1 15  1 15 2
2 15  2 15 3
0 16  0 16 4
1 16  1 16 5

データ型がまだ正しくないことに注意してください。最初の2列はfactorです。

5
Paul Hiemstra

これはtidyverseを使用してenframeを解決し、次にseparateを使用する方法です

library(tidyverse)
enframe(x, name = "v12", value = "v3") %>% 
  separate(v12, into = c("v1", "v2"))
0
Richard Telford