Можно ли вставить vector
в строку в data.frame
? Если да, то как?
R: Вставить вектор в виде строки в data.frame
Ответ 1
Я бы не стал утверждать, что это самое элегантное и красивое решение, но оно выполняет свою работу.
Обратите внимание, что каждая строка dataframe имеет собственное имя строки, что становится проблемой при вставке новых строк. При этом вы можете исправить это с помощью 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
Ответ 2
Сделать фреймворк 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 очень неэффективен, поэтому, если вы делаете это более нескольких сотен строк, ожидайте долгого ожидания. Если вам нужно быстро молниеносно, вам нужно предварительно выделить место или использовать метод списка, как показано здесь: fooobar.com/questions/60233/...
Ответ 3
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
Надежда была бы полезна.