Могу ли я вставить vector
как строку в data.frame
? Если да, то как?
R: вставить вектор в виде строки в data.frame
Ответы (3)
Я бы не стал утверждать, что это самое элегантное и красивое решение, но оно выполняет свою работу. Обратите внимание, что каждая строка кадра данных имеет свое собственное имя строки, что становится проблемой при вставке новых строк. При этом вы можете исправить это с помощью 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
rbind
с аргументом make.row.names=FALSE
- person Rich Scriven; 05.03.2017
Создать кадр данных 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
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
Надежда будет полезна.
bind_rows
из пакета dplyr. dplyr.tidyverse.org/reference/bind.html
- person peixe; 25.10.2019