【问题标题】:Class of variable inside a list of dataframes in RR中数据框列表中的变量类
【发布时间】:2021-08-16 17:34:21
【问题描述】:

我有一个包含多个数据框的列表,它们都有一个名为“year”的变量。如何使用 lapply 检查每个数据框中的年份类别?

【问题讨论】:

    标签: r apply


    【解决方案1】:

    我们可以通过循环list 来提取“年份”列并检查它的class。使用sapply,它返回一个vector,如果我们使用lapply,它将是一个list 输出

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

    使用R 4.1.0,lambda函数可以很紧凑

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

    【讨论】:

    • 谢谢。跟进问题,我如何将所有年份更改为相同的类型(例如日期)
    • @MuhammadKamil 这取决于每个“年”列的格式。如果不同,也许想使用anytime中的anydate
    • @MuhammadKamil。我认为您不能将四位数的整数更改为日期类型。日期需要日月年?!
    • @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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      相关资源
      最近更新 更多