我想要应用一个函数,该函数依赖于我的数据框中多对2列的数据.例如,使用tidyVerse My df如下所示:

test_df <- tibble(w = c("yes", "no"), x = c(1, 2), y = c("no", "yes"), z = c(4, 5))

我想应用以下功能:

function(a, b) = ifelse(a == "yes", b * 5, b)

但我想把它应用到w,x和y,z列.

我试过:

test_df %>% mutate_at(.vars = vars(c(w, y), c(x, z)), function(a,b) ifelse(a == "yes", b * 5, b))

但得到的错误是"b"是未定义的.我希望不要使用循环,因为我的数据集非常大,而且我有很多列对要迭代.

我也try 了Pivot_Long,但在我的df中还有很多其他列,所以Pivot_Long很快就变得杂乱无章.

如有任何帮助,我们将不胜感激!

推荐答案

我认为这适用于您的示例数据集:它假定包含数值的列的前面始终是成对的yes/no值列.

library(dplyr)

test_df %>% 
  mutate(across(where(is.numeric), function(x, y = cur_column()) {
    case_when(
      .[, which(colnames(.) == y) - 1] == "yes" ~ x * 5,
      TRUE ~ x
    )
  }))

结果:

# A tibble: 2 × 4
  w         x y         z
  <chr> <dbl> <chr> <dbl>
1 yes       5 no        4
2 no        2 yes      25

R相关问答推荐

替换字符的所有实例,但仅限于匹配字符串中

在处理因素时,Base R grep家族比stringr变体快得多

使用case_when和Mutate搜索多个列以寻找条件

在值和NA的行顺序中寻找中断模式

更改Heatmap Annotation对象的名称

如何计算前一行的值,直到达到标准?

手动打印线型gplot

用预测NLS处理R中生物学假设之上的误差传播

如何在格子中添加双曲曲线

使用R闪光显示所有数据点作为默认设置

在使用bslb和bootstrap5时,有没有办法更改特定dt行的 colored颜色 ?

使用范围和单个数字将数字与字符串进行比较

给定开始日期和月份(数字),如何根据R中的开始日期和月数创建日期列

为什么我使用geom_density的绘图不能到达x轴?

如何在R中通过多个变量创建交叉表?

查找所有站点的最小值

将工作目录子文件夹中的文件批量重命名为顺序

我是否可以使用多个变异项来构建顺序列(标记多个问题)

使用函数从R中的列中删除标高

将美学添加到ggploy中的文本标签