R: Вставить вектор как строку в data.frame - PullRequest
23 голосов
/ 06 сентября 2010

Могу ли я вставить vector как строку в data.frame?Если так, то как?

Ответы [ 3 ]

14 голосов
/ 06 сентября 2010

Я бы не стал утверждать, что это самое элегантное и симпатичное решение, но оно выполняет свою работу.Обратите внимание, что каждая строка данных имеет собственное имя строки, что становится проблемой при вставке новых строк.При этом вы можете исправить это с помощью 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
6 голосов
/ 05 марта 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

2 голосов
/ 25 ноября 2017

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

Надеюсь, будет полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...