使用mutate(across为一个现有列的不同截止值创建多个新列

0mkxixxg  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(184)

我尝试为一个现有列的不同截止值创建新列(二进制变量)。下面是我的尝试:

df <- data.frame(x = rnorm(10))

cutoffs <- c(-1, 0, 1)

df <- df %>%
  mutate(across(
    .cols = everything(),
    .names = "{.col}_cutoff_{cutoffs}",
    .fns = setNames(lapply(cutoffs, function(cut) as.integer(x <= cut)), paste0("cutoff_", cutoffs))
  ))

这一直返回一个错误。哪里出错了?

kr98yfug

kr98yfug1#

你的函数没有返回函数。注意。fns应该是一个函数。在你的例子中它不是一个函数
您可以在mutate之外编写函数。注意,由于您已经使用了.names参数,因此不需要设置name。

df %>%
   mutate(across(
     .cols = everything(),
     .names = "{.col}_cutoff_{cutoffs}",
     .fns = lapply(cutoffs, \(cut) \(x)as.integer(x <= cut))))

            x x_cutoff_-1 x_cutoff_0 x_cutoff_1
1  -0.5644413           0          1          1
2  -0.7638014           0          1          1
3  -0.6759922           0          1          1
4   0.1781104           0          0          1
5   0.6114332           0          0          1
6   2.3147138           0          0          0
7  -1.3219765           1          1          1
8  -0.7737188           0          1          1
9   0.1433984           0          0          1
10  1.6090404           0          0          0

相关问题