#r #dataframe #rbind
#r #dataframe #rbind
Вопрос:
#--------Get Sunday's from 2018-01-01 till today---------------------
d = seq(as.Date("2018-01-01"),Sys.Date(),by='day')
sundayList = d[weekdays(d)=='Sunday']
HolidayList = as.data.frame(sundayList)
colnames(HolidayList)[1] = "Holidays"
#---------Get Alternate saturdays 2nd and 4th------------------------
d = seq(as.Date("2018-01-01"),Sys.Date(),by='day')
saturdayList = d[weekdays(d)=='Saturday']
altSaturdayList = lapply(split(saturdayList, format(saturdayList, "%Y-%m")), function(x)
na.omit(x[c(2,4)]))
altSaturdayList = as.data.frame(altSaturdayList)
altSaturdayList = gather(altSaturdayList)
altSaturdayList = subset(altSaturdayList,select = c(colnames(altSaturdayList)[2]))
Пока все работает как ожидалось, но я не могу связать два столбца так, чтобы иметь воскресенья, а также 2-ю и 4-ю субботы только в одном фрейме данных
HolidayList$Holidays = rbind(HolidayList$Holidays,altSaturdayList$value)
Любые комментарии по улучшению существующего кода помогут.
Я получаю следующее сообщение об ошибке.
> HolidayList$Holidays = rbind(HolidayList$Holidays,altSaturdayList$value)
Error in `$<-.data.frame`(`*tmp*`, Holidays, value = c(17538, 17544, 17545, :
replacement has 2 rows, data has 63
In addition: Warning message:
In rbind(HolidayList$Holidays, altSaturdayList$value) :
number of columns of result is not a multiple of vector length (arg 2)
Комментарии:
1. Просто создать новый фрейм данных?
df <- data.frame(values = c(HolidayList$Holidays,altSaturdayList$value))
2. это создает новый фрейм данных, который не является целью, с которой мне нужно добавить его в существующий dataframe HolidayList
3. затем замените
df
наHolidayList
4. Хорошо, я не заметил, какое назначение вы сделали
HolidayList$Holidays
Это может быть просто `HolidayList <-
Ответ №1:
Мы можем использовать bind_rows
, сделав имена столбцов одинаковыми
library(dplyr)
bind_rows(HolidayList, set_names(altSaturdayList, "Holidays"))
Или с rbind
rbind(HolidayList, setNames(altSaturdayList, "Holidays"))
Комментарии:
1. не удалось найти function set_names нужен ли мне какой-либо пакет?
2. @newguy вы также можете использовать
rbind
после изменения имени столбца.3. смотрите, когда я использую HolidayList $ Holidays = rbind(HolidayList, setNames(altSaturdayList, «Праздники»)), я получаю сообщение об ошибке, в котором говорится, что замена содержит 93 строки, данные — 63. Хотя ваш ответ правильный и по существу, мне нужно сохранить результат в существующих столбцах фрейма данных HolidayList. Извините, я все еще новичок в этом.
4. @newguy Используете ли вы это для тех же данных, которые вы показали в качестве примера (который у меня отлично работает). Если это другой набор данных со многими столбцами, его необходимо указать
5. Я думаю, им нужно,
HolidayList = rbind(HolidayList, setNames(altSaturdayList, "Holidays"))
они пытаются сохранить результат dataframe в столбцеHolidayList$Holidays = rbind(HolidayList, setNames(altSaturdayList, "Holidays"))