r - 一次将数据框的所有列作为函数 (R) 的参数传递
问题描述
对于因我的特殊需要而遇到文档是多么困难,我真的很惊讶。我发现很多关于如何多次调用给定函数的文档,每次都将数据框的不同列作为输入——因此通过对每一列应用相同的函数来改变每一列——。这不是我所要求的。
相反,我只想调用给定函数一次,并将数据框的所有列作为参数传递给它。也就是说,使用数据框中的所有变量作为输入,我想创建一个新变量。
例如,设df为以下数据框:
V1 | V2 | V3 |
---|---|---|
2019-07-15 UTC--2020-07-15 UTC | 2020-09-17 UTC--2022-09-17 UTC | 2018-07-19 UTC--2018-09-19 UTC |
2019-07-15 UTC--2020-07-15 UTC | 2020-09-17 UTC--2022-09-17 UTC | 2018-07-20 UTC--2019-07-20 UTC |
请注意,所有三个变量都是通过 lubridate 包创建的区间。
现在,我想创建一个显示区间交集的新列。
df = df %>% mutate(new_variable = lubridate::intersect(V1, V2, V3))
由于df只有几列,而且它们都没有一个复杂或长的名称,所以必须显式地写出每个变量的名称并不太麻烦。但是,如果我的数据框没有 3 列,例如 10 列,那么编写列名将不再是明智之举。实际上,众所周知,程序员是懒惰的,我也不例外:我不想写下列名,即使我正在处理单列数据框。
编辑
这可能与手头的问题有关。令x为以下区间向量:
[1] 2019-07-15 UTC--2020-07-15 UTC 2017-11-22 UTC--2017-11-22 UTC
[3] 2020-09-17 UTC--2022-09-17 UTC 2018-07-19 UTC--2018-09-19 UTC
[5] 2018-07-20 UTC--2019-07-20 UTC 2018-07-20 UTC--2019-07-20 UTC
现在,我将尝试使用 do.call 来将x的每个元素作为参数传递给 intersect 函数。
> do.call(lubridate::intersect, list(x))
Error in int_standardize(y) :
el argumento "y" está ausente, sin valor por omisión
错误消息转换为argument "y" is absent, with no default value
.
解决方案
当你想到 时,你已经很亲密了do.call()
。
您的示例不包含交集,因此我添加了一行相交。我还加了id
一行:
df = structure(list(id = 1:3, V1 = new("Interval", .Data = c(31622400, 31622400, 34300800), start = structure(c(1563148800, 1563148800, 1563148800), class = c("POSIXct", "POSIXt"), tzone = "UTC"), tzone = "UTC"), V2 = new("Interval", .Data = c(63072000, 63072000, 65750400), start = structure(c(1600300800, 1600300800, 1594944000), class = c("POSIXct", "POSIXt"), tzone = "UTC"), tzone = "UTC"), V3 = new("Interval", .Data = c(5356800, 31536000, 34214400), start = structure(c(1531958400, 1532044800, 1532044800), class = c("POSIXct", "POSIXt"), tzone = "UTC"), tzone = "UTC")), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
library(tidyverse)
library(lubridate)
df %>%
mutate(id=row_number()) %>%
pivot_longer(-id) %>%
group_by(id) %>%
summarise(var=do.call(intersect, as.list(value)))
# A tibble: 3 x 2
# id var
# <int> <Interval>
# 1 NA--NA
# 2 NA--NA
# 3 2020-07-17 UTC--2020-08-15 UTC
推荐阅读
- azure - Azure Synapse 无服务器 SQL 池 - 查询执行失败
- ansible - Ansible line-in-file 重新添加条目
- imagemagick - 我可以使用 ImageMagick 获取不同颜色像素的数量列表吗?
- hyperledger-fabric - 超级账本结构:总是 MVCC_READ_CONFLICT
- c++ - C++中的“while”命令
- nlp - 如何在 spaCy 中处理很长的文档?
- r - 在数据框中捕获 R 函数的结果、错误和警告
- python-3.x - cPanel Sudo 不可用
- bash - 在 bash 脚本中的文本文件中写入字数
- angular - 如何使用角度实现带有复选框的多选下拉过滤器