vector
をdata.frame
の行として挿入できますか?もしそうなら?
これが最もエレガントできれいなソリューションであると私は主張しませんが、それで仕事が完了します。各データフレーム行には独自の行名が付けられていることに注意してください。これは、新しい行を挿入するときに問題になります。そうは言っても、これをrow.names
で修正できます(以下を参照)。
my.df <- data.frame(a = runif(10), b = runif(10), c = runif(10))
my.vec <- c(1, 1, 1)
new.df <- rbind(my.df[1:5, ], my.vec, my.df[6:nrow(my.df), ])
new.df
a b c
1 0.45433791 0.3798105 0.84514864
2 0.07074529 0.4985765 0.53912585
3 0.09645574 0.5441647 0.96636213
4 0.60788436 0.6070706 0.53791603
5 0.01593911 0.1697248 0.62697924
6 1.00000000 1.0000000 1.00000000
61 0.98455694 0.2206702 0.85500531
7 0.85356834 0.5279596 0.27462326
8 0.48028935 0.6689572 0.05428349
9 0.95675901 0.6875491 0.77642924
10 0.24691330 0.7980741 0.24013096
row.names(new.df) <- 1:nrow(new.df) # make row names pretty again
ベクトルから水平方向にRデータフレームを作成します
重要な洞察は、R転置メソッドt(...)
を使用して、ベクトルをdata.frame
コンストラクターに渡す前に転置することです。
my_name_vector = c("penguin1", "penguin2", "penguin3", "penguin4");
my_data_vector = c("Skipper", "Kowalski", "Rico", "Private");
supplemental_vector = c("Mumble", "Dorthy", "Norma", "Memphis");
#create a data frame out of a transposed vector
penguins = as.data.frame(t(my_data_vector));
#change the names of the dataframe to be the titles
colnames(penguins) <- my_name_vector;
supplemental_data_frame <- data.frame(t(supplemental_vector));
colnames(supplemental_data_frame) <- my_name_vector;
supplemental_data_frame;
#rbind means row bind, pass in two data.frame
penguins <- rbind(penguins, supplemental_data_frame);
penguins;
プリント:
penguin1 penguin2 penguin3 penguin4
1 Mumble Dorthy Norma Memphis
penguin1 penguin2 penguin3 penguin4
1 Skipper Kowalski Rico Private
2 Mumble Dorthy Norma Memphis
Rbindメソッドは非常に非効率的であるため、これを数百行以上行う場合は、長時間待機することを期待してください。迅速に対応する必要がある場合は、事前にスペースを割り当てるか、次に示すようにlistメソッドを使用する必要があります。 https://stackoverflow.com/a/20689857/445131
rbind
は良いですが、前後の正確な行番号を処理するのは本当にトリッキーです。より迅速な方法は、パッケージinsertRow
でmiscTools
を使用することです。
上記のデータセットの例では、コードは次のようになります。
my.df <- as.matrix(data.frame(a = runif(10), b = runif(10), c = runif(10)))
my.vec <- c(1, 1, 1)
new.df <- insertRow(my.df,7,my.vec)
new.df
参考になれば幸いです。