将 Pipe 用于多个 ifelse 函数的问题
Issue with using Pipe for multiple ifelse functions
我正在使用 tidyverse 包并使用管道术语“%>%”
在多个函数上使用它之后,我似乎得到了一个错误(找不到函数)-.-^而且我没有在网上找到关于这个术语(“%>%<-”)的任何信息。
#AB1
df_1$AB1<- ifelse(df_1$AB1==1 , 1 ,
ifelse(df_1$AB1== 2, as.integer(-1),
ifelse(df_1$AB1== 3, 0,
ifelse(df_1$AB1== 4,0,NA)))) %>%
#AB2
df_1$AB2<- ifelse(df_1$AB2==1 , 1 ,
ifelse(df_1$AB2== 2, as.integer(-1),
ifelse(df_1$AB2== 3, 0,
ifelse(df_1$AB2== 4,0,NA))))
我已经尝试将数据帧更改为 df_2 f.e。或删除第二个df_1$AB2<-
#AB1
df_1$AB1<- ifelse(df_1$AB1==1 , 1 ,
ifelse(df_1$AB1== 2, as.integer(-1),
ifelse(df_1$AB1== 3, 0,
ifelse(df_1$AB1== 4,0,NA)))) %>%
#AB2
ifelse(df_1$AB2==1 , 1 ,
ifelse(df_1$AB2== 2, as.integer(-1),
ifelse(df_1$AB2== 3, 0,
ifelse(df_1$AB2== 4,0,NA))))
好像我真的不明白管道的事情。我想让 R 运行 一个接一个地实现这两个功能,但它似乎不起作用?有没有办法节省一些时间,因为我想避免每次以这种方式更改我的数据时在许多不同的功能上使用“ctrl”+“r”。
向您致以最诚挚的问候!
您应该首先将整个数据框确定为管道的数据。之后,你不应该为每个函数都提供数据输入,管道就是这样,这就是管道的魔力。
你可以使用 transmute 来转换你想要的列。
case_when() 是多个嵌套 ifelse() 的一个很好、更干净的替代方法。
如果没有来自您的数据的示例(请 post (dput(head(df_1)))以及您尝试的结果,很难确切地说出什么应该起作用,但是您可能没问题:
试试这个。
#AB1
df_1 %>% transmute(AB1=case_when(
AB1==1 ~ 1 ,
AB1== 2 ~ as.integer(-1),
AB1== 3 ~ 0,
AB1== 4 ~ 0,
TRUE ~ NA) %>%
transmute(AB2=case_when(
AB2==2 ~ 1 ,
AB2== 2 ~ as.integer(-1),
AB2== 3 ~ 0,
AB2== 4 ~ 0,
TRUE ~ NA)
我正在使用 tidyverse 包并使用管道术语“%>%” 在多个函数上使用它之后,我似乎得到了一个错误(找不到函数)-.-^而且我没有在网上找到关于这个术语(“%>%<-”)的任何信息。
#AB1
df_1$AB1<- ifelse(df_1$AB1==1 , 1 ,
ifelse(df_1$AB1== 2, as.integer(-1),
ifelse(df_1$AB1== 3, 0,
ifelse(df_1$AB1== 4,0,NA)))) %>%
#AB2
df_1$AB2<- ifelse(df_1$AB2==1 , 1 ,
ifelse(df_1$AB2== 2, as.integer(-1),
ifelse(df_1$AB2== 3, 0,
ifelse(df_1$AB2== 4,0,NA))))
我已经尝试将数据帧更改为 df_2 f.e。或删除第二个df_1$AB2<-
#AB1
df_1$AB1<- ifelse(df_1$AB1==1 , 1 ,
ifelse(df_1$AB1== 2, as.integer(-1),
ifelse(df_1$AB1== 3, 0,
ifelse(df_1$AB1== 4,0,NA)))) %>%
#AB2
ifelse(df_1$AB2==1 , 1 ,
ifelse(df_1$AB2== 2, as.integer(-1),
ifelse(df_1$AB2== 3, 0,
ifelse(df_1$AB2== 4,0,NA))))
好像我真的不明白管道的事情。我想让 R 运行 一个接一个地实现这两个功能,但它似乎不起作用?有没有办法节省一些时间,因为我想避免每次以这种方式更改我的数据时在许多不同的功能上使用“ctrl”+“r”。
向您致以最诚挚的问候!
您应该首先将整个数据框确定为管道的数据。之后,你不应该为每个函数都提供数据输入,管道就是这样,这就是管道的魔力。
你可以使用 transmute 来转换你想要的列。 case_when() 是多个嵌套 ifelse() 的一个很好、更干净的替代方法。
如果没有来自您的数据的示例(请 post (dput(head(df_1)))以及您尝试的结果,很难确切地说出什么应该起作用,但是您可能没问题: 试试这个。
#AB1
df_1 %>% transmute(AB1=case_when(
AB1==1 ~ 1 ,
AB1== 2 ~ as.integer(-1),
AB1== 3 ~ 0,
AB1== 4 ~ 0,
TRUE ~ NA) %>%
transmute(AB2=case_when(
AB2==2 ~ 1 ,
AB2== 2 ~ as.integer(-1),
AB2== 3 ~ 0,
AB2== 4 ~ 0,
TRUE ~ NA)