[英]apply function multiple dataframes in R
我有多个数据框,并希望在每个数据框中的同名列中执行相同的操作。
我能够执行for循环来读取多个CSV并创建数据帧,但无法使for循环工作以在数据帧中的同一列中使用str_pad。
例如,我有:
a$ARTICLE_NUMBER <- str_pad(a$ARTICLE_NUMBER, 11, pad = 0)
b$ARTICLE_NUMBER <- str_pad(b$ARTICLE_NUMBER, 11, pad = 0)
c$ARTICLE_NUMBER <- str_pad(c$ARTICLE_NUMBER, 11, pad = 0)
我试过了:
vendor_list <- c("a", "b", "c")
for(i in vendor_list){
i[ARTICLE_NUMBER] <- str_pad(i[ARTICLE_NUMBER], width = 11, pad = 0)
}
以及:
lapply(vendor_list, function(x){
x[ARTICLE_NUMBER] <- str_pad(x[ARTICLE_NUMBER], width = 11, pad = 0)
return(x)
})
也:
string_pad <- function(x){
x[ARTICLE_NUMBER] <- str_pad(x[ARTICLE_NUMBER], width = 11, pad = 0)
}
vendor_list <- lapply(vendor_list, string_pad(x) x[, 1])
不知道我错过了什么。 任何帮助深表感谢!
我认为主要问题是您在data.frame
对列进行处理的庄园,您的第一次尝试将适用于以下内容:
i[['ARTICLE_NUMBER']] <- str_pad(i[['ARTICLE_NUMBER']], width = 11, pad = 0)
无论哪种情况,我都建议采用不同的方法。 在dplyr
包中, dplyr
上的data.frame
的操作要容易dplyr
library(dplyr)
vendor_list <- list(a, b, c)
pad_article_num <-
function(df) {
mutate(df, ARTICLE_NUMBER = str_pad(ARTICLE_NUMBER, width = 11, pad = 0)
}
vendor_list <- lapply(vendor_list, pad_article_num)
您可以将三个数据框添加到列表中,然后使用lapply():
df_list <- list(a, b, c)
lapply(df_list, function(x) {
x[["ARTICLE_NUMBER"]] <- str_pad(x[["ARTICLE_NUMBER"]], 11, pad = 0)
})
我在这里和那里看到一些错误:什么是a$ARTICLE_NUMBER
需要作为参数传递给str_pad
函数? 是否已经存在运行for循环/ lapply函数? 如果是,那么你必须能够编写lapply / for循环函数。 由于我不知道您的数据是什么样的,我在这里会给您一个更简单的版本
将变量定义为:
a=b=c=list()# Just ensure they are lists
lapply(list(a=a,b=b,c=c),function(x) {x$ARTICLE_NUMBER= "TYPE FUNCTION HERE";x})
从上面的代码我得到的结果:
$a
$a$ARTICLE_NUMBER
[1] "TYPE FUNCTION HERE"
$b
$b$ARTICLE_NUMBER
[1] "TYPE FUNCTION HERE"
$c
$c$ARTICLE_NUMBER
[1] "TYPE FUNCTION HERE"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.