r语言 - 迭代地改变嵌套的数据框架



我有一个具有相同列名的数据框架列表。我想遍历这些数据框,对其中一列进行一些更改,然后将该更改应用到原始数据框。我知道这样做通过迭代是不理想的,所以如果有更好的方法使用lapply,请告诉我!

df <- list(
'2020-01-01' = data.frame(value = c(3,5,7,8),
wt = c(1,1,1,1)),
'2020-02-01' = data.frame(value = c(90,90,98,91),
wt = c(1,1,1,1)),
'2020-03-01' = data.frame(value = c(0,10,3,8),
wt = c(1,1,1,1)))
for(i in df){
data <- data.frame(
val = i$value,
wt = i$wt) %>%
mutate(wt = ifelse(val > 95 | val < 5, 100, 1))
# mutation works within the loop
print(data)
# But this bit does nothing
i = data
}
print(df)

看起来i = data什么都没做。但是如果我在循环外做同样的事情,用特定的数据帧替换i:df$'2020-01-01'它工作得很好:

data <- data.frame(val = df$`2020-01-01`$value,
wt = df$`2020-01-01`$wt) %>% 
mutate(wt = ifelse(val > 95 | val < 5, 100, 1))
df$`2020-01-01` = data
df

使用lapplypurrr::map您可以:

library(dplyr)
df <- lapply(df, function(x) mutate(x, wt = if_else(value > 95 | value < 5, 100, 1)))
df
#> $`2020-01-01`
#>   value  wt
#> 1     3 100
#> 2     5   1
#> 3     7   1
#> 4     8   1
#> 
#> $`2020-02-01`
#>   value  wt
#> 1    90   1
#> 2    90   1
#> 3    98 100
#> 4    91   1
#> 
#> $`2020-03-01`
#>   value  wt
#> 1     0 100
#> 2    10   1
#> 3     3 100
#> 4     8   1

相关内容

  • 没有找到相关文章

最新更新