Как связать два столбца по строкам из двух разных фреймов данных?

#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"))