R добавление элемента в Dataframe в указанной позиции c - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу добавить строку в фрейм данных в R в указанной c позиции. Я знаю, что есть решения для этого на этом сайте, но они, похоже, не работают. Я знаю, что rbind довольно медленный, но, учитывая, что мне нужно сделать это только для одного элемента, это не имеет значения:

Пример:

vector_labour_brexit.m <- data.frame("value" = c(1,2,3,4,5,6,7,8,9))

temp <- rbind(vector_labour_brexit.m[1:5,], data.frame("value"=5000), 
                            vector_labour_brexit.m[6:nrow(vector_labour_brexit.m),])

Желаемый результат, очевидно, 1,2,3,4,5,5000,6,7,8,9, но я получаю 1,5000,6. Где моя ошибка?

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Ваша проблема в том, что при индексации фреймов данных, в которых есть только один столбец, возвращаемое значение упрощается до вектора, который сбивает с толку rbind. Чтобы быть в безопасности, вы можете сделать

vector_labour_brexit.m <- data.frame("value" = c(1,2,3,4,5,6,7,8,9))

temp <- rbind(vector_labour_brexit.m[1:5,,drop=FALSE],
              data.frame("value"=5000), 
              vector_labour_brexit.m[6:nrow(vector_labour_brexit.m),,drop=FALSE])
1 голос
/ 14 февраля 2020

Мы можем использовать add_row, чтобы добавить указанную c строку в местоположение

library(tibble)
add_row(vector_labour_brexit.m , .before = 6, value = 5000)
#   value
#1      1
#2      2
#3      3
#4      4
#5      5
#6   5000
#7      6
#8      7
#9      8
#10     9

. Ошибка в коде OP была по умолчанию drop = TRUE при наличии один столбец или строка, он отбрасывает размеры

vector_labour_brexit.m[1:5,]

Если мы добавим drop = FALSE во время поднабора, это будет работать

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