使用 %>% 运算符重写代码

Rewrite code using %>% operator

我尝试重写此代码(以学习此方法),使用 %>% 运算符:

library(arules) 
data(AdultUCI) #https://archive.ics.uci.edu/ml/datasets/Census+Income

AdultUCI[["capital-gain"]] <- ordered(cut(AdultUCI[["capital-gain"]],
+ c(-Inf, 0, median(AdultUCI[["capital-gain"]][AdultUCI
+ [["capital-gain"]] > 0]), Inf)),
+ labels = c("None", "Low", "High"))

可以吗?这是我的尝试:

AdultUCI[["capital-gain"]] <- ordered %>% cut %>% AdultUCI[["capital-gain"]], 
                            + c(-Inf, 0, median(AdultUCI[["capital-gain"]][AdultUCI[["capital-gain"]] > 0]), 
                            + Inf),labels = c("None", "Low", "High")

这应该有效:

library(dplyr)

#reproducible data
AdultUCI <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data",header=FALSE)  
colnames(AdultUCI)[13] <- "capital-gain"

#original code
originalOrdered <- 
  ordered(cut(AdultUCI[["capital-gain"]],
              c(-Inf, 0, 
                median(AdultUCI[["capital-gain"]][AdultUCI[["capital-gain"]] > 0]), Inf),
              labels = c("None", "Low", "High")),
          levels = c("None", "Low", "High"))

#using dplyr
newOrdered <- 
  AdultUCI %>% 
  select(x=`capital-gain`) %>% 
  mutate(capitalGainOrdered=
           ordered(
             cut(x,c(-Inf, 0, median(x[x > 0]), Inf),
                 labels = c("None", "Low", "High")),
             levels = c("None", "Low", "High"))) %>% 
  .$capitalGainOrdered


#test if same
identical(originalOrdered,newOrdered)
#[1] TRUE

str(newOrdered)
#Ord.factor w/ 3 levels "None"<"Low"<"High": 2 2 2 2 2 2 2 3 3 2 ...