通过lapply对数据帧列表进行操作时,不需要丢失列名

时间:2015-07-21 14:17:01

标签: r dataframe subset lapply

我有一个与下面示例相对应的数据框列表:

dta_a <- data.frame(geo=c(1:3), vals=c("1","3","#"))
dta_b <- data.frame(geo=c(1:3), vals=c("2","#","15"))
dta_c <- data.frame(geo=c(1:3), vals=c("2","11","15"))
lst <- list(dta_a, dta_b, dta_c)

数据框是在导入文件的过程中创建的,我想对每个数据框应用一些清理。我目前正在使用以下代码:

lst <- lapply(lst, function(x) {
  names(x) <- c("Geography",paste0("indicator_number_",as.character(x[1,2])))
  x <- x[-1,]
  x <- as.numeric(as.character(x[,2]))
})

以前分配给每个数据框的列名似乎现在丢失了:

> names(lst[[1]])
NULL

然而,在没有x <- as.numeric(as.character(x[,2]))的情况下应用相同的功能似乎有效:

> lst <- lapply(lst, function(x) {
+   names(x) <- c("Geography",paste0("indicator_number_",as.character(x[1,2])))
+   x <- x[-1,]
+   # x <- as.numeric(as.character(x[,2]))
+ })
> names(lst[[1]])
[1] "Geography"          "indicator_number_1"

我想知道为什么会发生这种情况,我怎样才能正确地将lapply函数中的数据框元素进行子集化。代码x <- x[-1,]执行了它应该执行的操作,因此我希望x <- as.numeric(as.character(x[,2]))也能正常工作。

0 个答案:

没有答案