我知道“cross”范例是“许多列,一个函数”,所以这可能是不可能的。
我使用cur_column()使其工作,但它基本上相当于逐个计算参数,而不是提供一个大小等于包含参数的列数的向量。
第一个区块产生了我想要的结果,但我想知道是否有更干净的方法。
library(dplyr)
df = data.frame(column1 = 1:100, column2 = 1:100)
parameters = data.frame(
column_names = c('column1','column2'),
parameters = c(10,100))
custom_function = function(x,addend){
x + addend
}
df2 = df %>% mutate(
across(x$column_names,
~custom_function(.,addend = x %>%
filter(column_names == cur_column()) %>%
pull(parameters))))
我想对最后一行做的是
df2 = df %>% mutate(
across(x$column_names,~custom_function(.,addend = x$parameters)))
4条答案
按热度按时间k2fxgqgv1#
我们可以在
base
中用mapply
来实现这一点:o4tp2gmn2#
我认为对参数操作的Map函数比对数据操作的
across
更容易:创建于2022年12月15日,使用reprex v2.0.2
xzv2uavs3#
编辑(第二列不起作用)。我不认为across是你想要的。另一个答案更好。你也可以像这样把列添加到你的函数中:
jfgube3f4#
我们可以在column_names列为"parameters"的列名(
cur_column()
)上使用match
,并提取"parameters"列值以用作custom_function
中的输入或者将两列 Dataframe 转换为命名向量(
deframe
),并直接从name
中提取值