【问题标题】:R - For loop for splitting column's text to new columnsR - 用于将列文本拆分为新列的 For 循环
【发布时间】:2021-05-08 18:07:55
【问题描述】:

我有 10 个数据框,其中包括气候数据。第 1 列是“日期”列,其类别为字符。 日期 格式为“19 年 1 月 5 日”。我想为我的所有数据框使用 for 循环将此列分成 3 个其他列。首先,我创建了一个名为“onomata”的向量,其中包含数据框名称:

onomata <- c("agia_paraskeui","ano_liosia","athens_gazi","marina",
         "kifisia","marousi","nea_smyrni","patisia","peristeri",
         "psychico")

然后我使用了 tidyr 包中的“分离”功能,并针对一个数据框测试了该功能:

agia_paraskeui <- separate(agia_paraskeui, col = date,
                         into = c("day","month","year"), sep = "/")

它按原样工作,然后我尝试使用下一个 for 循环将其应用于所有数据帧:

    for(i in onomata){
  i <- separate(i, col = date,
                        into = c("day","month","year"), sep = "/")
}

没有用。相反,我收到了以下错误消息:

"UseMethod("separate_") 中的错误: 没有适用于“字符”类对象的“单独_”方法

你认为是什么问题?

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

    如果需要在循环上应用,请使用map。对象名称是字符串。我们需要get 对象的值。如果有多个,请使用mget,它会返回list 中对象的值。循环list,并应用separate

    library(dplyr)
    library(tidyr)
    library(purrr)
    map(mget(onomata), ~ separate(.x, col = date,
        into = c("day","month","year"), sep = "/"))
    

    还有一个循环

    out <- vector('list', length(onomata))
    for(i in seq_along(onomata)) {
       out[[i]] <- separate(get(onomata[i]), col = date,
        into = c("day","month","year"), sep = "/")
      }
    

    【讨论】:

    • 非常感谢!它奏效了,您的解释对以后重复类似的过程非常有帮助!!!
    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 2013-03-09
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多