Как в R добавить новую строку во фрейм данных после того, как фрейм данных уже инициализирован?
Пока у меня есть это:
df <- data.frame("hi", "bye")
names(df) <- c("hello", "goodbye")
#I am trying to add "hola" and "ciao" as a new row
de <- data.frame("hola", "ciao")
merge(df, de) # Adds to the same row as new columns
# Unfortunately, I couldn't find an rbind() solution that wouldn't give me an error
Любая помощь будет оценена
de
тоже.names(de) <- c("hello","goodbye")
иrbind
rbind(df, setNames(de, names(df)))
rbind(data.frame(a = 1), data.frame(b = 2))
.. зачем вам это нужно? Я надеюсь, что это все равно вызовет ошибку. Это какmerge
со случайнойby
величиной. А это 2015 год, не все ли настроеныoptions(stringsAsFactors = FALSE)
?stringsAsFactors=FALSE
может быть быстрым решением, но изменение настроек по умолчанию, которые другие люди собираются установить по-другому, может действительно испортить день.Ответы:
Как @Khashaa и @Richard Scriven указывают в комментариях, вы должны установить согласованные имена столбцов для всех фреймов данных, которые вы хотите добавить.
Следовательно, вам необходимо явно объявить имена столбцов для второго фрейма данных
de
, а затем использоватьrbind()
. Вы устанавливаете имена столбцов только для первого фрейма данныхdf
:источник
newdf<-rbind(df, data.frame(hello="hola", goodbye="ciao"))
ИЛИ с переменной:newdf<-rbind(df, data.frame(hello=var1, goodbye=var2))
Сделаем это просто:
источник
df[nrow(df) + 1, 1:2] = c("v1", "v2")
иdf[nrow(df), 3] = 100
Но все же это хороший момент для добавления новой строки. Итак, +1list()
. Я отменил вашу правку.Или, как подсказал @MatheusAraujo:
df[nrow(df) + 1,] = list("v1","v2")
Это позволит использовать смешанные типы данных.
источник
Теперь
add_row()
из пакетовtibble
илиtidyverse
.Неуказанные столбцы получают расширение
NA
.источник
rbind
иas.matrix
нижеМне нравится,
list
а неc
потому, что он лучше обрабатывает смешанные типы данных. Добавление дополнительной колонки к исходному вопросу автора:Обратите внимание, что требуется некоторый дополнительный контроль, если преобразование строки / фактора важно.
Или используя исходные переменные с решением от MatheusAraujo / Ytsen de Boer:
Обратите внимание, что это решение не работает со строками, если в фрейме данных нет данных.
источник
hello
иgoodbye
присутствуют в символеdf
, вы можете сделать следующее. Вы не обязательно используете имена в списке.df <- data.frame(hello = "hi", goodbye = "bye", volume = 1,stringsAsFactors = FALSE); rbind(df, list("hola", "ciao", 100))
,Не очень элегантно, но:
Из документации
rbind
функции:источник
Мне нужно добавить
stringsAsFactors=FALSE
при создании фрейма данных.,
источник
Обязательно укажите
stringsAsFactors=FALSE
при создании фрейма данных:Невозможность использовать
stringsAsFactors=FALSE
при создании фрейма данных приведет к следующей ошибке при попытке добавить новую строку:источник
Существует более простой способ добавить запись из одного фрейма данных в другой, ЕСЛИ вы знаете, что эти два фрейма данных используют одни и те же столбцы и типы. Для добавления одной строки из
xx
кyy
просто сделать следующее , гдеi
являетсяi
«й строки вxx
.Просто как тот. Никаких запутанных переплетов. Если вам нужно добавить все
xx
кyy
, то либо вызовите цикл, либо воспользуйтесь возможностями последовательности R и сделайте следующее:источник
Если вы хотите создать пустой фрейм данных и добавить содержимое в цикл, может помочь следующее:
Надеюсь, поможет :)
источник