#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:
Вот пример, который показывает:
- как проверить класс(такой же, как akrun) в этом примере
numeric
- измените
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"