使用lapply更改列表元素中列的格式

时间:2017-12-08 15:18:36

标签: r

我有一个data.frames列表,我想更改data.frame的一列的类(从因素到日期)。我试图使用lapply然后,原始列表只包含该列(而不是整个data.frame)。我不明白这个行为......为了解决这个问题,我使用了一个共同的循环,但我想知道是否有人可以提出任何建议。 比方说,我有这个简单的数据:

       m1 <- data.frame("date"=c("2010-02-03","2010-01-05"),"value"=c(5,3))
       m2 <- data.frame("date"=c("2010-02-03","2010-01-05"),"value"=c(1,3))
       mylist <- list(m1,m2)
       #change date 
       newlist <- lapply(mylist, function(x) as.Date(x$date))

新名单只有日期.. 有没有办法使用lapply ...我正在使用大型数据集,通常lapply工作正常,但在这种情况下,我不知道我做错了什么。

非常感谢。

2 个答案:

答案 0 :(得分:2)

我们可以使用transform

lapply(mylist, transform, date = as.Date(date)) 

答案 1 :(得分:1)

在您的功能中,您必须先更改date列,然后返回x

newlist <- lapply(mylist, function(x) {
    x$date <- as.Date(x$date)
    x
})
newlist
# [[1]]
#         date value
# 1 2010-02-03     5
# 2 2010-01-05     3
# 
# [[2]]
#         date value
# 1 2010-02-03     1
# 2 2010-01-05     3