在 pandas 中,我经常使用这样的自定义函数执行逐行操作:
df = pd.DataFrame({'v1': [1, 2, 3], 'v2': [3, 4, 6], 'v3': [3, 4, 5]})
def f(row):
return(sum(row[["v1", "v3"]]) if row.v2 == 3 else 7)
df["new_col"] = df.apply(f, 1)
dplyr 中的等价物是什么?
请注意,函数 f 可能会使用许多变量,而不仅仅是 v1-v3,因此我不想在调用函数时将它们全部命名。
编辑:我目前在 R 中的示例代码。在这个解决方案中,我传递了一个代词对象,我怀疑它是否合适。
d <- tibble(v1 = c(1,2,3), v2 = c(3,4,6), v3 = c(3,4,5))
f <- function(row){
if (row$v2 == 3) sum(something?) else 7
}
d %>% rowwise() %>% mutate(new_column = f(.data)) %>% ungroup()
编辑2:预期输出。(索引列不重要)
v1 v2 v3 new_col
0 1 3 3 4
1 2 4 4 7
2 3 6 5 7
注意:我不是在寻找解决这个特定问题的方法。我对将行传递给 R / dplyr 中的函数的一般方法感兴趣,就像在 pandas 中的 apply() 一样。