首页 > 解决方案 > R - 用于将列文本拆分为新列的 For 循环

问题描述

我有 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_") 中的错误:没有适用于 'separate_' 的方法应用于“字符”类的对象

你认为是什么问题?

标签: rfor-loop

解决方案


如果需要将其应用于循环,请使用map. 对象名称是字符串。我们需要get对象的值。如果有多个,则使用mget它并返回 a 中对象的值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 = "/")
  }

推荐阅读