组合 mutate(across) 和 case_when 以根据条件用 0 填充多个列
combine mutate(across) and case_when to fill multiple columns with 0 depending on condition
在 dplyr 工作流程中,当 newvar == 0 时,我尝试在 dataframe 的每一列中的 newvar 列之后粘贴一个 0,否则什么也不做。
我修改了鸢尾花数据集:
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)))
我尝试了像这里这样的解决方案 How to combine the across () function with mutate () and case_when () to mutate values in multiple columns according to a condition?。
我的理解:
- with
.[,3:ncol(.)]
我浏览了 newvar 列之后的列。
- with
case_when(newvar==0
我试着设置条件
- with
~ 0
after newvar==0
如果条件满足,我试着说粘贴 0。
我知道我做错了什么,但我不知道是什么!感谢您的帮助。
.[,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 ~ .)))
在 dplyr 工作流程中,当 newvar == 0 时,我尝试在 dataframe 的每一列中的 newvar 列之后粘贴一个 0,否则什么也不做。 我修改了鸢尾花数据集:
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)))
我尝试了像这里这样的解决方案 How to combine the across () function with mutate () and case_when () to mutate values in multiple columns according to a condition?。 我的理解:
- with
.[,3:ncol(.)]
我浏览了 newvar 列之后的列。 - with
case_when(newvar==0
我试着设置条件 - with
~ 0
afternewvar==0
如果条件满足,我试着说粘贴 0。
我知道我做错了什么,但我不知道是什么!感谢您的帮助。
.[,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 ~ .)))