R 使用管道和用户定义的函数修改变量以创建是/否
我有十几个变量被编码为“0”或“1”,对应于“否”和“是”。我想重命名这些变量并同时重新编码它们。在以下情况下,我可以使用mutate和case_逐个执行此操作:R 使用管道和用户定义的函数修改变量以创建是/否,r,dplyr,user-defined-functions,R,Dplyr,User Defined Functions,我有十几个变量被编码为“0”或“1”,对应于“否”和“是”。我想重命名这些变量并同时重新编码它们。在以下情况下,我可以使用mutate和case_逐个执行此操作: > df$`*weight loss (dich)` [1] 0 0 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 [31] 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 [61]
> df$`*weight loss (dich)`
[1] 0 0 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0
[31] 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
[61] 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1
[91] 1 1 1 0 1 1 0 0 1 0 1 0 0 1 1 1 0 0 1 0 0 0 1 0 1 0 1 1 1 1
[121] 0 1 1 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1
[151] 1 1 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
df %<>%
mutate(weight_loss = case_when(
df$`*weight loss (dich)` == 0 ~ "No",
df$`*weight loss (dich)` == 1 ~ "Yes"
))
>df$`*体重损失(dich)`
[1] 0 0 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0
[31] 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
[61] 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 1
[91] 1 1 1 0 1 1 0 0 1 0 1 0 0 1 1 1 0 0 1 0 0 0 1 0 1 0 1 1 1 1
[121] 0 1 1 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1
[151] 1 1 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
df%%
变异(重量损失=情况)(
df$`*重量损失(dich)`==0~“否”,
df$`*体重损失(dich)`==1~“是”
))
我想写一个函数,在多个变量上执行相同的操作,给定输入,其中x=新名称,y=旧名称。以下是我的尝试,但不起作用:
> ynf <- function(x, y) {
+ df %<>%
+ mutate(x = case_when(
+ y == 0 ~ "No",
+ y == 1 ~ "Yes"
+ ))
+ }
>
> ynf(weight_loss, df$`*weight loss (dich)`)
>
> glimpse(df$weight_loss)
NULL
Warning message:
Unknown or uninitialised column: 'weight_loss'.
>ynf
>ynf(重量损失,df$`*重量损失(dich)`)
>
>一瞥(df$减肥)
无效的
警告信息:
未知或未初始化列:“失重”。
谢谢你的帮助 我们可以更改函数以计算“x”、“y”,并执行赋值
:=
以创建列
library(dplyr)
library(magrittr)
ynf <- function(x, y) {
df %<>%
mutate(!! enquo(x) := case_when(
{{y}} == 0 ~ "No",
{{y}} == 1 ~ "Yes"
))
}
df <- ynf(weight_loss, `weight loss (dich)`)
glimpse(df)
#Rows: 20
#Columns: 2
#$ `weight loss (dich)` <int> 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1
#$ weight_loss <chr> "No", "No", "Yes", "No", "Yes", "No", "No", "Yes", "Yes", "Yes", "Yes", "No",…
库(dplyr)
图书馆(magrittr)
ynf我将使用mutate_at/mutate_all
,这里是一个示例mtcars%>%mutate_at(vars(vs,am),list(new=~ifelse(.==1,“Yes”,“No”)
set.seed(24)
df <- data.frame(`weight loss (dich)` = sample(0:1, 20, replace = TRUE),
check.names = FALSE)