首页 > 解决方案 > 没有适用于“单独_”的方法应用于“字符”类的对象

问题描述

我的环境中有四个数据框,每个数据框的第一列如下所示:

      product.consom.unit.tax.currency.geo.time
1                 6000,4161901,KWH,I_TAX,EUR,AL
2                 6000,4161901,KWH,I_TAX,EUR,AT
3                 6000,4161901,KWH,I_TAX,EUR,BA
4                 6000,4161901,KWH,I_TAX,EUR,BE
5                 6000,4161901,KWH,I_TAX,EUR,BG
6                 6000,4161901,KWH,I_TAX,EUR,CY

我想使用 tidyr 将第一列分成多列separate

data <- list(c("df1", "df2", "df3", "df4"))
sep <- function(x){
  x <- separate(x, 1, c("prod", "band", "unit", "tax", "currency", "geo"), ",", remove = TRUE)
}
lapply(data, sep)

当我运行时,lapply我收到以下错误:

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

任何和所有的帮助将不胜感激!

标签: rlapplytidyr

解决方案


一旦我按照@gersht 和@NelsonGon 的建议更改data <- list(c("df1", "df2", "df3", "df4"))为,您的代码实际上可以在我的机器上运行一次。data <- list(df1, df2, df3, df4)您也需要删除c()

我也尝试过一种for loop方法:


df1 <- data.frame(product.consom.unit.tax.currency.geo.time = c( 
            "6000,4161901,KWH,I_TAX,EUR,AL",
           "6000,4161901,KWH,I_TAX,EUR,AT",
             "6000,4161901,KWH,I_TAX,EUR,BA",
             "6000,4161901,KWH,I_TAX,EUR,BE",
             "6000,4161901,KWH,I_TAX,EUR,BG",
             "6000,4161901,KWH,I_TAX,EUR,CY"))
df2 <- df3 <- df4 <- df1
data <- list(df1, df2, df3, df4)

library(tidyr)
for (i in 1:4) {
  assign(paste0("df", i), separate(data.frame(data[i]), 1, c("prod", "band", "unit", "tax", "currency", "geo"), ",", remove = TRUE)) 
}              

推荐阅读