我有一个与下面示例相对应的数据框列表:
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]))
也能正常工作。