【发布时间】:2018-11-13 22:01:45
【问题描述】:
在尝试解决这个问题时遇到了困难。如此有效地,我试图在宽数据框中选择单元格,其中一列中的值包含在列名的字符串中。我通常在我的工作流程中使用 tidyverse,并且无法让该诗句中的任何内容起作用。尝试应用,用于循环遍历行。有一些事情要做,但它们非常慢。附加的数据帧 sn-p 只是 180 万行数据帧的前 10 行。所以在这里使用tidy::gather 是不可能的。任何关于如何实现这一点的想法都会很有用,因为它出现的频率比我预期的要多。
library(tidyverse)
library(foreach)
df <- read_csv('test_data.csv')
所以在这里我试图找到包含在宽 var_ 字段中的 fire_year 变量。例如,如果fire_year = 1998,那么我想捕获名为var_1998 的列中的值。这是我获得解决方案的最接近的方法(并且它有效!)但它需要永远在完整的数据框架上:
df_slim <- foreach(df=iter(df, by='row'), .combine=rbind,
.packages = c('dplyr', "tidyverse")) %do% {
df_out <- df %>%
gather(key = key, value = out_var, -fpa_id, -fire_year) %>%
separate(key,
into = c("tmp1", 'zyear'),
sep = "_") %>%
mutate(var = ifelse(fire_year == zyear, out_var, NA)) %>%
na.omit() %>%
dplyr::select(fpa_id, fire_year, var)
return(df_out)
}
我想不出快速、有效的方法来完成我的一生!至此,我已经计算出在 170 万行数据帧上完成这个 for 循环需要 160 个小时!如果有人能指出我正确的方向,我将永远感激不尽!
谢谢!
【问题讨论】:
标签: r