我正在将相同的功能应用于多个数据框。例如,我要在df1中合并column2和column3。应用此功能后,df1将获得一个名为col2_col3的新列。
df1 <- data.frame(x = rep(3, 5), y = seq(1, 5, 1), ID = letters[1:5])
df2 <- data.frame(x = rep(5, 5), y = seq(2, 6, 1), ID = letters[6:10])
#I define a function:
PasteTwoColumn <- function(x)
{
x$col2_col3 <- paste(x[,2], x[,3], sep = "_")
return(x)
}
#apply the function to the df1, it works.
df1 <- PasteTwoColumn(df1)
# but I failed by an lappy function, because it returns a list, not the dataframe
mylist <- list(df1, df2)
result <- lapply(mylist, PasteTwoColumn)
我想继续将此功能应用于所有数据框,例如df1,df2,df3 ... df100。输出文件应保持相同类型的数据框和名称。
lapply 函数不起作用,因为它返回一个列表,而不是单独的数据框。
答案 0 :(得分:2)
我们可以将数据集保留在list
中,并用list
遍历lapply
lst1 <- lapply(list(df1, df2), PasteTwoColumn)
如果有许多数据集,请使用mget
将数据集的值放入list
lst1 <- lapply(mget(paste0('df', 1:100)), PasteTwoColumn)
或者代替paste
,我们也可以使用ls
lst1 <- lapply(mget(ls(pattern = '^df\\d+$')), PasteTwoColumn)
如果我们需要更新原始对象,请使用list2env
list2env(lst1, .GlobalEnv) #not recommended though
如果我们需要使用for
循环
for(obj in paste0("df", 1:100)) {
assign(obj, PasteTwoColumn(get(obj)))
}