R-编程 : How to loop through a list of dataframes and manipulate specific columns within each?

标签 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 列。

我想要的是:

  1. 包含 3 个数据框的列表(保留数据框的名称)
  2. 在每个数据框中,State_Date 和 US_Date 这两个字段的日期格式都是这样
  3. 除第 8 列外的所有列都将格式化为因子

感谢您的帮助!

** 下面的正确代码显示了我应该根据响应执行的操作:

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)
                                 }
                    )

最佳答案

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

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

最后你应该return(x)

关于R-编程 : How to loop through a list of dataframes and manipulate specific columns within each?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340393/

相关文章:

r - 使用 rbind() 在 lapply() 中将多个数据帧组合成一个更大的 data.frame

r - 如何在与 Linux `cksum` 命令输出兼容的 R 中计算 CRC 校验和

r - 根据其他列中的重复值和日期合并两列中的值

python - 将列表的每个元素插入到mysql python中的单独列中

python - 为什么 Python +=(加等于)运算符不修改内部函数中的变量?

r - 将列表行转置为数据框

r - R中应用函数族的命名/名称

r - 在 R 中的 Shiny 中进行时间序列预测; Shiny 显示 unix 纪元时间

r - 计算多列中相同值的频率

c++ - 清除 std::list 动态对象的最快方法是什么?