2010-09-06 37 views

回答

11

我不會聲稱這是最優雅和漂亮的解決方案,但它完成了工作。 請注意,每個數據幀行都有自己的行名,這在插入新行時會成爲問題。這就是說,你可以通過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 
+0

你可以在'rbind'中用參數'make.row.names = FALSE'來做行名 – 2017-03-05 04:03:58

1

製作的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方法是非常低效的,所以如果你正在做超過幾百行,則此多,預計要等很長的時間。如果您需要快速閃電,那麼您需要預先分配空間或使用列表方法,如下所示:https://stackoverflow.com/a/20689857/445131

1

rbind雖然很好,但真正棘手的是要處理前後的確切行號。更快速的方法是在包miscTools中使用insertRow

在上面的數據集示例中,代碼將是:

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 

希望將是有益的。

+0

這比rbind好多了!謝謝! – Rodrigo 2018-03-03 07:09:14

相關問題