循环以从列表转换数据帧中的不同列

时间:2018-11-24 18:52:19

标签: r list dataframe apply lapply

我想遍历数据帧列表,将数据帧中的特定列转换为数字(在我的情况下,它是列表中每个数据帧的第二列和第三列)   我已经在这里有一些代码了,不知道为什么它不起作用...

有人可以帮我吗?

lapply(myfiles2[[]][[,c(2,3)]], as.numeric)

1 个答案:

答案 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