在R中两个因素GROUP_BY()使用lapply

前任:

我有这个数据帧(命名为OEM_final)。这是结构:

str(OEM_final)
'data.frame':   2265 obs. of  17 variables:
 $ dia_hora_OEM : POSIXct, format: "2019-12-31 06:40:13" "2019-12-31 06:43:00" "2019-12-31 07:11:30" "2019-12-31 07:18:30" ...
 $ coche_OEM    : Factor w/ 6 levels "356232050832996",..: 3 3 3 3 3 3 3 3 6 6 ...
 $ DTC_OEM_dec64: chr  "[{\"code\":\"B1182\",\"description\":\"Tire pressure monitor module\",\"faultInformations\":[{\"description\":\"| __truncated__ "[{\"code\":\"B1182\",\"description\":\"Tire pressure monitor module\",\"faultInformations\":[{\"description\":\"| __truncated__ "[{\"code\":\"B1182\",\"description\":\"Tire pressure monitor module\",\"faultInformations\":[{\"description\":\"| __truncated__ "[{\"code\":\"B1182\",\"description\":\"Tire pressure monitor module\",\"faultInformations\":[{\"description\":\"| __truncated__ ...
 $ rowname      : Factor w/ 2265 levels "1","10","100",..: 1 1112 1489 1600 1711 1822 1933 2044 2155 2 ...
 $ B1182        : Factor w/ 2 levels "B1182","NULL": 1 1 1 1 1 1 1 1 2 2 ...
 $ B124D        : Factor w/ 2 levels "B124D","NULL": 1 1 1 1 1 1 1 1 2 2 ...
 $ NA.          : Factor w/ 6 levels "c(NA, NA, NA, NA, NA, NA, NA, NA)",..: 3 3 3 3 3 3 3 3 1 1 ...
 $ P2000        : Factor w/ 2 levels "c(\"P2000\", \"P2000\", \"P2000\")",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ U3003        : Factor w/ 2 levels "NULL","U3003": 1 1 1 1 1 1 1 1 1 1 ...
 $ B1D01        : Factor w/ 3 levels "B1D01","c(\"B1D01\", \"B1D01\")",..: 3 3 3 3 3 3 3 3 3 3 ...
 $ U0155        : Factor w/ 2 levels "NULL","U0155": 1 1 1 1 1 1 1 1 1 1 ...
 $ C1B00        : Factor w/ 2 levels "C1B00","NULL": 2 2 2 2 2 2 2 2 2 2 ...
 $ P037D        : Factor w/ 2 levels "NULL","P037D": 1 1 1 1 1 1 1 1 1 1 ...
 $ P0616        : Factor w/ 2 levels "NULL","P0616": 1 1 1 1 1 1 1 1 1 1 ...
 $ P0562        : Factor w/ 2 levels "NULL","P0562": 1 1 1 1 1 1 1 1 1 1 ...
 $ U0073        : Factor w/ 2 levels "NULL","U0073": 1 1 1 1 1 1 1 1 1 1 ...
 $ P0138        : Factor w/ 2 levels "c(\"P0138\", \"P0138\", \"P0138\")",..: 2 2 2 2 2 2 2 2 2 2 ...

我想计算出较早的日期(dia_hora_OEM由两个因素分组时出现)。这两个因素是:

  • 这一个因素,这是在所有可能的组合常见的,是coche_OEM
  • 另一种是一个从第8栏(P2000)到最后一个(P0138),一次一个。

所以,group_by()应该是:

  • group_by(coche_OEM, P2000)
  • group_by(coche_OEM, U3003)
  • group_by(coche_OEM, B1D01)
  • group_by(coche_OEM, U0155)
  • ...

我尝试不同的方法来实现:

使用for循环:

for (DTC in c(U3003, P2000)) {
  OEM_final %>%
  group_by(DTC, coche_OEM) %>%
  filter(dia_hora_OEM == min(dia_hora_OEM))
}

但是,我得到一个错误说:

Error in c(U3003, P2000) : object 'U3003' not found

运用 lapply

在这种情况下,我创建了一个功能:

groupCombDTC <- function(x) {
  OEM_final %>%
  group_by(coche_OEM, x) %>%
  filter(dia_hora_OEM == min(dia_hora_OEM))
}

然后我跑了lapply()

lapply(colnames(OEM_final)[8:17], groupCombDTC)

我得到这个错误:

Error: Column `x` is unknown

任何人可以帮助我以不同的组合使用迭代group_by()

地震:

这是标准评价的标准问题dplyrdplyr基于非标准如此评价报价参数必须加引号。

有几种解决方案。这一个效果很好

groupCombDTC <- function(x) {
  OEM_final %>%
  group_by(coche_OEM, !!rlang::sym(x)) %>%
  filter(dia_hora_OEM == min(dia_hora_OEM))
}

它需要一起使用!!,并rlang::sym以所享有和评估您的变量名。

列名作为参数更容易与手柄data.table如果你想在关于SE / NSE更多的元素dplyrdata.table,你可以看看一个博客帖子我写了几天前

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用r中其他两个列的group_by对行进行计数

在减去两个日期列 R 时使用 group_by 而不是使用排列时出错

关于使用R中的ggplot2的两个因素的可信区间

使用Zoo或更好的软件包从R中的数据帧中减去具有两个因素的行

使用 lapply 将 R 中的两个矩阵列表相乘

如何用R中的两个因素总结一个数值变量

基于R中的两个因素的未拆分简化数据表

如何按R中的两个以上因素对数据进行分组

我如何使用R来遍历两个因素的水平

对 R 中方差分析的两个因素

获得两个不同的表中的列的总和与GROUP_BY单列

使用dplyr计算每次访问的两个因素的比率

Group_by /按函数汇总两个变量

R:使用lapply在两个列表上同时迭代一个函数?

比较expss表中的两个变量(数值或两个因素)

R-使用lapply将两个变量传递给函数

SQL Group 使用两个表中的两个不同日期

基于两个因素的减法

基于两个因素的排名公式

在 SQL 中连接两个表时使用“GROUP BY”

使用Lapply应用带有两个参数的函数

`dplyr::group_by` 中的因素是否有限制?

如何使用应用程序 A 的两个因素和应用程序 B 的两个因素不使用相同的用户登录?

来自GROUP_BY的两个LEFT JOIN的GROUP_CONCAT的奇怪重复行为

如何使用R中的group_by查找特定列的最大3个值计数?

在Ubuntu Server SSH登录中添加两个因素验证

ggplot2:修改散点图{ggplot2}中两个因素的图例元素?

如何从具有两个因素的数据框中创建嵌套列表?

如何基于两个因素在 Python 中创建新列表?