2

在 dplyr 工作流程中,当 newvar == 0 时,我尝试在数据框的每一列中粘贴 0 在 newvar 列之后,否则什么也不做。我修改了虹膜数据集:

library(dplyr)
n <- 150 # sample size

iris1 <- iris %>% 
    mutate(id = row_number(), .before = Sepal.Length) %>% 
    mutate(newvar = sample(c(0,1), replace=TRUE, size=n), .before = Sepal.Length ) %>% 
    mutate(across(.[,3:ncol(.)], ~ case_when(newvar==0 ~ 0)))

我尝试了像这里这样的解决方案如何将cross()函数与mutate()和case_when()结合起来,根据条件改变多列中的值?. 我的理解:

  1. 我浏览了.[,3:ncol(.)]newvar 列之后的列。
  2. 我尝试case_when(newvar==0设置条件。
  3. 如果条件满足,我尝试说粘贴 0~ 0之后。newvar==0

我知道我做错了什么,但我不知道是什么!谢谢您的帮助。

4

1 回答 1

1

.[,3:ncol(.)]是列的值,而不是实际的列号。使用3:ncol(.)应该可以正常工作。

通常,最好避免按位置引用列,而是使用它们的名称。您可以在一个mutate电话中完成此操作。

library(dplyr)

n <- 150

iris %>% 
  mutate(id = row_number(), 
        newvar = sample(c(0,1), replace=TRUE, size=n), 
        across(Sepal.Length:Petal.Width, ~ case_when(newvar==0 ~ 0, 
                                                     newvar == 1 ~ .)))
于 2021-01-03T11:29:32.880 回答