我的环境中有四个数据框,每个数据框的第一列如下所示:
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
我想使用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_”的适用方法应用于“字符”类的对象
任何人和所有帮助将不胜感激!
答案 0 :(得分:1)
按照@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))
}
答案 1 :(得分:1)
您帖子下的评论指出了问题所在。我提供了结合lapply()
和list2env()
来实现您想要的解决方案的方法:
library(tidyr)
data <- list(df1, df2, df3, df4)
names(data) <- paste0("df", 1:4)
list2env(lapply(data, separate, 1, c("prod", "band", "unit", "tax", "currency", "geo"), ","), .GlobalEnv)
(remove
中参数separate()
的默认值为TRUE
,因此我将其忽略。)
df1
至df4
将被覆盖为单独的表单。