Доступ к значениям R Dataframe вместо Tibble

Я опытный пользователь Pandas, и у меня возникают проблемы с подключением значений из моего R-фрейма к функции.

Следующая функция работает с жестко закодированными значениями

>seq.Date(as.Date('2018-01-01'), as.Date('2018-01-31'), 'days') 

 [1] "2018-01-01" "2018-01-02" "2018-01-03" "2018-01-04" "2018-01-05" "2018-01-06" "2018-01-07"
 [8] "2018-01-08" "2018-01-09" "2018-01-10" "2018-01-11" "2018-01-12" "2018-01-13" "2018-01-14"
[15] "2018-01-15" "2018-01-16" "2018-01-17" "2018-01-18" "2018-01-19" "2018-01-20" "2018-01-21"
[22] "2018-01-22" "2018-01-23" "2018-01-24" "2018-01-25" "2018-01-26" "2018-01-27" "2018-01-28"
[29] "2018-01-29" "2018-01-30" "2018-01-31"

Вот выдержка из фрейма данных, который я использую

>df[1,1:2]
# A tibble: 1 x 2
  start_time end_time  
  <date>     <date>    
1 2017-04-27 2017-05-11

При подключении этих значений к функции seq.Date я получаю сообщение об ошибке

> seq.Date(from=df[1,1], to=df[1,2], 'days')
Error in seq.Date(from = df[1, 1], to = df[1, 2], "days") : 
'from' must be a "Date" object

Я подозреваю, что это связано с тем, что подмножество с использованием df[x,y] возвращает табличку, а не конкретное значение

data.class(df[1,1])
[1] "tbl_df"

Я надеюсь получить последовательность дат. Мне нужно иметь возможность указывать это в разных местах фрейма данных.

Большое спасибо за любую помощь!


person Clem Manger    schedule 24.04.2018    source источник
comment
Часто нет необходимости вызывать метод S3 seq.Date напрямую, просто вызовите seq(), и R выполнит отправку на правильный метод для вас.   -  person SymbolixAU    schedule 24.04.2018
comment
Кроме того, tibble реализация [ изменяет поведение по сравнению с обычной data.frames. по умолчанию drop = FALSE, поэтому, если вы привыкли работать с базой R, вы споткнетесь, которая по умолчанию равна drop = TRUE.   -  person SymbolixAU    schedule 24.04.2018


Ответы (3)


Просто используйте двойные скобки:

seq.Date(from=df[[1,1]], to=df[[1,2]], 'days')
person r.user.05apr    schedule 24.04.2018

Функции извлечения таблицы могут возвращать не векторы, а таблицы одного столбца, используйте dplyr::pull для извлечения столбца как вектора, как в этом ответе: Извлечь столбец таблицы dplyr как вектор

person snaut    schedule 24.04.2018

Другой вариант — установить аргумент drop в функции `[` равным TRUE.

Если TRUE, результат приводится к наименьшему возможному размеру.

seq.Date(from = df[1, 1, drop = TRUE], to = df[1, 2, drop = TRUE], 'days')
# [1] "2017-04-27" "2017-04-28" "2017-04-29" "2017-04-30" "2017-05-01" "2017-05-02" "2017-05-03" "2017-05-04" "2017-05-05" "2017-05-06"
#[11] "2017-05-07" "2017-05-08" "2017-05-09" "2017-05-10" "2017-05-11"

данные

df <- tibble(start_time = as.Date('2017-04-27'), 
             end_time = as.Date('2017-05-11'))
person markus    schedule 24.04.2018