【发布时间】:2018-10-24 13:17:40
【问题描述】:
背景:
大家好,
我希望你能帮助我将我的理解和代码提升到一个新的水平。我试图围绕列表、它们的好处以及使用它们来减少冗余代码。尽管我在网上阅读了有关列表和申请家庭的信息,但我仍然无法理解如何在我的日常工作中实施。
这是一种我认为可以大大简化的情况 - 这是我经常编写的代码类型,我希望用更简洁的格式替换它。
示例:
让我们假设整个 mtcars 数据是针对单个观察年份的——比如 2018 年。我们还假设我们每年都有数据可以追溯到 2000 年。所以现在有“18”个 mtcars data.frames 有一个年份列表示这一年,我们将 18 个观察值逐行绑定到一个 data.frame 中。这是我现在正在使用的数据类型的一个示例。观察按年份分开。
data <- mtcars %>%
group_by(date) %>%
mutate(rank = dense_rank(desc(mpg))
))
我想简化的数据操作:
-
过滤:我想按不同的mpg等级过滤给定年份的所有内容
数据 %>% 过滤器(齿轮 == 4,日期 == '2005')%>% 过滤器(排名 %in% c(1:5))
数据 %>% 过滤器(齿轮 == 4,日期 == '2005')%>% 过滤器(排名 %in% c(6:10))
数据 %>% 过滤器(齿轮 == 4,日期 == '2005')%>% 过滤器(排名 %in% c(11:15))
简化上述冗余代码块的最佳方法是什么?
例如,我想利用seq 函数并按照以下方式做一些事情:
data %>%
filter(gear == 4, date == '2005') %>%
filter(rank %in% seq(1, 100, by = 5))
并将每个排名组的输出存储到一个列表中,然后在 ggplot 中绘制所有这些列表。
任何帮助或建议将不胜感激,我正在努力改进我的游戏。
【问题讨论】:
-
您要问的问题非常广泛,即,一般而言,我如何使我的代码减少冗余?在过滤的特定情况下,我的策略是创建可以连接到主要数据帧的“帮助”数据帧。例如,您可能有一个包含
year、min和max列的数据框,按“年”将其连接到mtcars,然后filter(mtcars, year >= min & year <= max) -
您应该寻找拆分而不是过滤的函数。
标签: r list vector functional-programming programmatically