【发布时间】:2018-11-10 20:19:42
【问题描述】:
我有一系列与此类似的数据框:
df <- data.frame(x = c('notes','year',1995:2005), y = c(NA,'value',11:21))
df2 <- data.frame(x = c('notes','year',1995:2005), y = c(NA,'value',50:60))
为了清理它们,我编写了一个带有一组清理步骤的用户定义函数:
clean <- function(df){
colnames(df) <- df[2,]
df <- df[grep('^[0-9]{4}', df$year),]
return(df)
}
我现在想将我的数据框放在一个列表中:
df_list <- list(df,df2)
并立即将它们全部清理干净。我试过了
lapply(df_list, clean)
和
for(df in df_list){
clean(df)
}
但是使用这两种方法我都会得到错误:
Error in df[2, ] : incorrect number of dimensions
是什么导致了这个错误,我该如何解决?我解决这个问题的方法有问题吗?
【问题讨论】:
-
您没有列
df$year。您的数据创建代码错误,请查看使用该代码创建的内容并更正它。 -
在数据清理功能中,列名设置为数据框中的第二行。第二行包含字符串“year”和“value”。当您将单个 df 传递给函数时,该函数可以正常工作,但是当我尝试循环遍历它或将其应用于列表时会出错。
-
df <- df[grep('^[0-9]{4}', df$year),]中不需要逗号吗? -
你说得对,我的错字。不幸的是,这不是问题的原因。
标签: r list loops lapply data-cleaning