【问题标题】:mutate in data frames list in loop循环中的数据帧列表中的变异
【发布时间】:2017-07-11 14:14:49
【问题描述】:

我创建了一个数据框列表。 我正在尝试使用 mutateselect 命令更改原始数据帧。我从所有数据框创建了一个列表

m <- as.list(paste0(rep("traffic_", 12), 2005:2016))

我尝试运行下一个命令:但它仍然不适合我。

foreach(x=iter(m)) %do% { assign(x, mutate(x , date = make_datetime(shana, hodesh, taarich, shaa)) %>%
                               select( -shana, -hodesh, -taarich, -shaa)) }

这是原始数据帧之一

> traffic_2016
  shana kvish keta maslul hodesh taarich yom shaa nefah status
1      2016     1   10      1      9      11   1    0  1710     NA
2      2016     1   10      1      9      11   1    1   934     NA
3      2016     1   10      1      9      11   1    2   800     NA
4      2016     1   10      1      9      11   1    3   637     NA
5      2016     1   10      1      9      11   1    4   588     NA
6      2016     1   10      1      9      11   1    5   951     NA
7      2016     1   10      1      9      11   1    6  2312     NA
8      2016     1   10      1      9      11   1    7  3769     NA
9      2016     1   10      1      9      11   1    8  3348     NA
10     2016     1   10      1      9      11   1    9  2788     NA
11     2016     1   10      1      9      11   1   10  2879     NA

【问题讨论】:

  • dplyr 上下文中的突变不是就地修改内存而言的突变。在这种情况下,这是一种转变。您必须将转换结果分配给对象,因此请尝试m[[i]] = mutate(i , date = ...
  • 尝试设计一个函数并使用lapply 将其应用到您的列表中。它可能会更有效率。
  • 您可能还想以这种方式创建您的 m 对象:m = list(noquote(paste0(rep("traffic_", 12), 2005:2016))) 而不是写所有这些流量词。
  • 如果您能提供可重现的示例数据集,并显示代码以加载 dplyrlubridate 包,那就太好了。
  • stackoverflow.com/questions/44208873/… 希望链接对您有所帮助

标签: r list loops dataframe dplyr


【解决方案1】:

您要编辑每个原始数据框:

mtcars1 <- mtcars
mtcars2 <- mtcars

m <- list("mtcars1","mtcars2")

您可以使用assign 按名称编辑数据。我使用get 来编辑实际数据:

library(iterators)
library(foreach)
library(dplyr)
foreach(x=iter(m)) %do% { assign(x, mutate(get(x), mpg=mpg+1) %>% select(mpg,cyl)) }

使用您的mutate

foreach(x=iter(m)) %do% { assign(x, mutate(get(x) , date = make_datetime(shana, hodesh, taarich, shaa)) %>% select( -shana, -hodesh, -taarich, -shaa)) }

【讨论】:

  • 很抱歉,它不起作用。它写错误:错误:意外的数字常量:“lapply(iter(m), function(X) mutate(x, date = make_datetime(shana, hodesh, taarich, shaa)) 5"
  • 再次检查您的 mutateselect 是否适用于每个数据帧。看起来您的某个数据框可能有问题。
  • 谢谢,它可以工作,但值仍然和以前一样。例如,当我打印“Traffic_2015”时,它仍然和以前一样。如何根据 lapply 函数保存数据帧?
  • 看来您应该编辑原始帖子。您将df 保存在list 中,但这并未引用原始df。您只想将df 的名称保存在列表中,并使用assign 按名称更新每个df
  • 那我该怎么做,如何更改原始数据?
猜你喜欢
  • 2021-10-31
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2022-06-29
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
相关资源
最近更新 更多