Класс переменной внутри списка кадров данных в R

#r #apply

Вопрос:

У меня есть список, содержащий несколько фреймов данных, и все они имеют переменную под названием «год». Как проверить класс года внутри каждого кадра данных с помощью lapply?

Ответ №1:

Мы можем извлечь столбец «год», пройдя по list нему и проверив его class . С sapply , он возвращает a vector , и если мы будем использовать lapply , это будет list вывод

 sapply(lst1, function(x) class(x$year))
 

При R 4.1.0 этом лямбда-функция может быть компактной

 sapply(lst1, (x) class(x$year))
 

Комментарии:

1. Спасибо. Последующий вопрос, как мне изменить все годы на один и тот же тип (например, дата)

2. @muhammadkamilэто зависит от формата для каждого столбца «год». Если он отличается, возможно, захотите использовать anydate из anytime

3. @Мухаммадкамиль. Я думаю, что вы не можете изменить целое число из четырех цифр на тип даты. Для свидания нужен день, месяц и год?!

4. @TarJae OP не показал никакого примера. Итак, неясно

Ответ №2:

Вот пример, который показывает:

  1. как проверить класс(такой же, как akrun) в этом примере numeric
  2. измените year столбец во всех кадрах данных на character
 # example data:
df_list <- list(df1 = data.frame(year = c(2018, 2020, 2021)),
                df2 = data.frame(year = c(1989, 1988, 1977)))

# check class (same as akruns just using lapply)
lapply(df_list, function(x) class(x$year))

# change the class of year columns in all dataframe to character
list1 <- lapply(df_list, function(x) mutate_at(x, "year", as.character))

# check again
lapply(list1, function(x) class(x$year))
 

Выход:

 > lapply(df_list, function(x) class(x$year))
$df1
[1] "numeric"

$df2
[1] "numeric"

> 
> list1 <- lapply(df_list, function(x) mutate_at(x, "year", as.character))
> 
> lapply(list1, function(x) class(x$year))
$df1
[1] "character"

$df2
[1] "character"