在 R 中使用 map_*()

Using map_*() in R

我正在使用 attrition 数据并使用 map() 检查每一列是否是一个因素。

到目前为止我取得了这么多:

attrition %>% map_df(~(data.frame(class = class(.x))),
                     .id = "Column")

这给我以下输出:

Column   class
1                       Age integer
2                 Attrition  factor
3            BusinessTravel  factor
4                 DailyRate integer
5                Department  factor
6          DistanceFromHome integer
7                 Education ordered
8                 Education  factor
9            EducationField  factor
10  EnvironmentSatisfaction ordered
11  EnvironmentSatisfaction  factor
12                   Gender  factor
13               HourlyRate integer
14           JobInvolvement ordered
15           JobInvolvement  factor
16                 JobLevel integer
17                  JobRole  factor
18          JobSatisfaction ordered
19          JobSatisfaction  factor
20            MaritalStatus  factor
21            MonthlyIncome integer
22              MonthlyRate integer
23       NumCompaniesWorked integer
24                 OverTime  factor
25        PercentSalaryHike integer
26        PerformanceRating ordered
27        PerformanceRating  factor
28 RelationshipSatisfaction ordered
29 RelationshipSatisfaction  factor
30         StockOptionLevel integer
31        TotalWorkingYears integer
32    TrainingTimesLastYear integer
33          WorkLifeBalance ordered
34          WorkLifeBalance  factor
35           YearsAtCompany integer
36       YearsInCurrentRole integer
37  YearsSinceLastPromotion integer
38     YearsWithCurrManager integer

这个套路我也用过

attrition %>% map_df(~(data.frame(class = class(.x))),
                     .id = "Column") %>% is.factor()

但它只给我 FALSE 价值。如何将它作为现有数据框的新列应用于所有列。

使用mutate添加新列:

library(dplyr)
library(purrr)

attrition %>% 
  map_df(~(data.frame(class = class(.x))),.id = "Column") %>%
  mutate(is_factor = class == 'factor')

我们可以使用tibble

library(dplyr)
library(purrr)
library(tibble)
attrition %>%
    map_dfr(~  .x %>% 
                 class %>%
                 tibble(class = ., is_factor = class == 'factor'), 
         .id = 'Column')