lapply函数到.dbf文件列表并返回每个文件的相应列中的值

时间:2014-08-13 18:59:41

标签: r list lapply

这可能是一件非常简单的事情,我很想念,但这让我很生气。

我已将.dbf文件导入到如下列表中:

library("foreign")
shp_files <- list.files("C:/Docs/DBfs", pattern = ".dbf", full.names = T)
shp <- lapply(shp_files, function(x){
read.dbf(x)
})

所有文件都有相同的列标题。我想应用一个函数,根据其他列的值将一个方程应用于一列。

为了论证而使解释更容易让我说我有A,B和C列,我想将它们加在一起计算D列。我可以看到我需要使用lapply来应用一个对所有文件起作用如下:

Col_func <- function(x){
  X$D <- X$A + X$B +X$C
}

lapply(shp, Col_func)

这将返回R窗口中的值而不是列D.

我尝试了一些不同的组合,例如:

Col_func <- function(x){
  X$A + X$B +X$C
}

shp$D <- lapply(shp, Col_func)

但似乎没有任何效果。

这可能是我很遗憾的事情,但我似乎无法找到答案(我可能会自己踢)。

谢谢

1 个答案:

答案 0 :(得分:0)

我不能肯定地说,因为没有可重复的例子。特别是,提供shp的一个小例子会很有帮助。但这可能有用:

Col_func <- function(X){
  X$D <- X$A + X$B +X$C
  return(X)
}
shp <- lapply(shp, Col_func)

此版本的Col_funcD列添加到给定的data.frame。 lapply使其为列表中的每个data.frame执行此操作,并输出新的data.frames列表。