我有
df <- data.frame(
var1 = c(0, 1, 0, 1, 1, 0, 1),
var2 = c("1", "1", "0", "0", "1", "1", "0"),
var3 = c("1", "1", "0", "0", "1", "3", "1"),
var4 = c(0, 0, 1, 1, 1, 0, 3),
var5 = c("Yes", "No", "Yes", "No", "Yes", "No", "Yes"),
var6 = c("Yes", "No", "Yes", "No", "Yes", "No", "Maybe")
)
Run Code Online (Sandbox Code Playgroud)
我想搜索严格且仅 0
/1
值的所有变量,并将它们转换为带有"No"
/"Yes"
标签的因子。
我的尝试是
df %>%
mutate(across(where(unique(.) == c("0", "1")),
.fns = ~factor(ifelse(., "Yes", "No"), levels = c("Yes", "No"))))
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。
Error in `mutate()`:
! Problem while computing `..1 = across(...)`.
Caused by error in `across()`:
! Problem while evaluating `where(unique(.) == c("0", "1"))`.
Caused by error in `where()`:
! Can't convert `fn`, a logical matrix, to a function.
Run Code Online (Sandbox Code Playgroud)
tidyverse
我在/系统内寻求解决方案dplyr
pipe
。我不想指定要搜索或转换哪个变量。
仅在上面的例子中var1
和var2
应该被转换。
您应该能够执行以下操作:
library(dplyr)
df %>%
mutate(across(where(~ all(.x %in% 0:1)), factor, labels = c("No", "Yes")))
var1 var2 var3 var4 var5 var6
1 No Yes 1 0 Yes Yes
2 Yes Yes 1 0 No No
3 No No 0 1 Yes Yes
4 Yes No 0 1 No No
5 Yes Yes 1 1 Yes Yes
6 No Yes 3 0 No No
7 Yes No 1 3 Yes Maybe
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
104 次 |
最近记录: |