データ フレームのリストを 1 つの大きなデータ フレームに変換したいと思います。問題は、リストしかなく、個別のデータ フレームがないことです。データ フレームの名前を含み、行名を含まない追加の列を新しいデータ フレームに含める必要があります。
私が試したのは次のとおりです。
d1 <- data.frame(x = c(1.1,2.0,3.5), y = c(4.1,5.1,6.3))
d2 <- data.frame(x = c(3.3,2.7,1.9,2.9,1.9),y = c(6.4,5.2,2.4,3.0,5.1))
d3 <- data.frame(x = c(3.4,2.7,1.8,0.2),y = c(6.2,5.0,4.1,0.5))
my.list <- list(green = d1, blue = d2, yellow = d3)
ターゲット データ フレームは次のようになります。
target.df <- data.frame(colour = c(rep("green",nrow(d1)), rep("blue", nrow(d2)), rep("yellow", nrow(d3))),
x = c(1.1,2.0,3.5, 3.3,2.7,1.9,2.9,1.9, 3.4,2.7,1.8,0.2),
y = c(4.1,5.1,6.3, 6.4,5.2,2.4,3.0,5.1, 6.2,5.0,4.1,0.5)
)
コード
my.df <- do.call(rbind.data.frame, my.list)
余分な列の代わりに、データ フレームの名前から行名を持つデータフレームを生成します。
私はこれを試しました:
new.df <- stack(my.list)
しかし〜がある Error in stack.default(my.list) : at least one vector element is required
ターゲット データ フレームを作成するにはどうすればよいですか。
私たちは、使用することができMap
、これを行うために
do.call(rbind, unname(Map(cbind, colour = names(my.list), my.list)))
結果:
do.call(rbind, unname(Map(cbind, colour = names(my.list), my.list)))
colour x y
1 green 1.1 4.1
2 green 2.0 5.1
3 green 3.5 6.3
4 blue 3.3 6.4
5 blue 2.7 5.2
6 blue 1.9 2.4
7 blue 2.9 3.0
8 blue 1.9 5.1
9 yellow 3.4 6.2
10 yellow 2.7 5.0
11 yellow 1.8 4.1
12 yellow 0.2 0.5
私たちが使用している場合やdplyr
、その後bind_rows
のオプションを持っています.id
library(dplyr)
bind_rows(my.list, .id = 'colour')
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加