R - 编程:如何循环遍历数据框列表并操纵每个数据框中的特定列?

时间:2013-12-03 00:10:17

标签: r list lapply

所以我有三个数据框,每个数据框有14列。

iowa <- data.frame() #Has 14 columns; let's say 600 records
maine <- data.frame() #Has same 14 columns; let's say 700 records
texas <- data.frame() #Has same 14 columns; let's say 900 records

我将这些数据框放在列表中,

state_List <- list(iowa, maine, texas)

然后我想在state_List到日期格式的每个数据框内更改两列(称为“State_Date”和“US_Date”),我想将除一个列之外的所有列更改为因子。我写了以下内容:

state_List <- lapply(state_List,
                     function(x){
                                 x$State_Date <- as.Date(x$State_Date, format = "%m/%d/%Y")
                                 x$US_Date <- as.Date(x$US_Date, format = "%m/%d/%Y")
                                 x[, c(1:7, 9:14)] <- as.factor(x[, c(1:7, 9:14)]
                                 }
                     )

我收到的错误是

Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?

此错误是由as.factor部分引起的。

但是,如果我摆脱lapply中调用的函数的最后一次评估,只保留两个更改日期字段类的函数,我得到的是:

  1. 包含其中包含的3个数据框名称的列表
  2. 列表中的每个数据框,或者我应该说列表中数据框的每个插槽现在都填充了该状态的US_Date列。
  3. 我想要的是:

    1. 包含3个数据框的列表(保留数据框的名称)
    2. 在每个数据框中,State_Date和US_Date这两个字段的日期已经格式化为
    3. 除第8列以外的所有列都被格式化为因子
    4. 感谢您的帮助!

      * * 以下正确的代码显示我应根据回应完成的任务:

      state_List <- list(iowa = iowa, maine = maine, texas = texas)
      state_List <- lapply(state_List,
                           function(X){
                                       x$State_Date <- as.Date(x$State_Date, format = "%m/%d/%Y")
                                       x$US_Date <- as.Date(x$US_Date, format = "%m/%d/%Y")
                                       x[, c(1:7, 9:14)] <- lapply( x[, c(1:7, 9:14)] , factor)
                                       return(x)
                                       }
                          )
      

1 个答案:

答案 0 :(得分:2)

该函数内的第三行应该是:

x[, c(1:7, 9:14)] <- lapply( x[, c(1:7, 9:14)] , factor)

最后你应该return(x)