【发布时间】:2021-05-16 02:49:21
【问题描述】:
对于为我的特殊需要遇到文档是多么困难,我感到非常惊讶。我发现很多关于如何多次调用给定函数的文档,每次都将数据框的不同列作为输入 - 因此通过应用于 eacheach 列/strong> 一个完全相同的功能——。这不是我需要的。
相反,我只想调用给定函数一次,并将数据框的所有列作为参数传递给它。也就是说,使用数据框中的所有变量作为输入,我想创建一个新变量。
例如,让 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。
【问题讨论】:
-
整形为长格式,然后在
purrr::reduce或基Reduce中使用函数? -
请使用
dput(head(df))包含您的数据样本