Подтвердить что ты не робот

R: Вставить вектор в виде строки в data.frame

Можно ли вставить vector в строку в data.frame? Если да, то как?

4b9b3361

Ответ 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

Надежда была бы полезна.