我想遍历数据帧列表,将数据帧中的特定列转换为数字(在我的情况下,它是列表中每个数据帧的第二列和第三列) 我已经在这里有一些代码了,不知道为什么它不起作用...
有人可以帮我吗?
lapply(myfiles2[[]][[,c(2,3)]], as.numeric)
答案 0 :(得分:0)
这并不难。 Yoy必须在列表中循环(lapply
),以更改每个成员data.frame的感兴趣的列,并再次调用lapply
。
首先,给出一些示例数据集,因为您尚未发布任何数据集。
set.seed(1234)
myfiles2 <- lapply(1:4, function(i){
data.frame(X = letters[1:5], Y = factor(sample(5)), Z = as.character(11:15))
})
str(myfiles2) # output omited
现在是问题。
cols <- 2:3
myfiles3 <- lapply(myfiles2, function(DF){
DF[cols] <- lapply(DF[cols], as.numeric)
DF
})
要查看它是否可以使用以下两个功能,就可以了。
lapply(myfiles3, function(DF) sapply(DF, class))
str(myfiles3)
#List of 4
# $ :'data.frame': 5 obs. of 3 variables:
# ..$ X: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
# ..$ Y: num [1:5] 1 3 2 4 5
# ..$ Z: num [1:5] 1 2 3 4 5
# $ :'data.frame': 5 obs. of 3 variables:
# ..$ X: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
# ..$ Y: num [1:5] 4 1 5 2 3
# ..$ Z: num [1:5] 1 2 3 4 5
# $ :'data.frame': 5 obs. of 3 variables:
# ..$ X: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
# ..$ Y: num [1:5] 4 3 1 2 5
# ..$ Z: num [1:5] 1 2 3 4 5
# $ :'data.frame': 5 obs. of 3 variables:
# ..$ X: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
# ..$ Y: num [1:5] 5 2 1 3 4
# ..$ Z: num [1:5] 1 2 3 4 5