使用filter/mutate和dplyr/tidyverse逻辑对数据库进行分类

使用filter/mutate和dplyr/tidyverse逻辑对数据库进行分类,r,dplyr,R,Dplyr,我正在尝试使用tidyverse逻辑对具有级联标准的数据帧进行分类(我正在尝试学习它)。我可以用base R做,但不能用tidyverse做-我找到了一些使用混合方法tidyverse+base R(使用子集)的示例,但无法找到/理解如何仅使用dplyr/tidyverse语法(过滤、变异) 问题是,在为第一个标准(使用过滤器)进行子集设置之后,数据帧只包含过滤后的行,我无法应用剩余的标准进行子集和分类。我可能可以使用一个临时的df和rbind(),但我认为可以用一种更优雅的方法,只使用tidy

我正在尝试使用tidyverse逻辑对具有级联标准的数据帧进行分类(我正在尝试学习它)。我可以用base R做,但不能用tidyverse做-我找到了一些使用混合方法tidyverse+base R(使用子集)的示例,但无法找到/理解如何仅使用dplyr/tidyverse语法(过滤、变异)

问题是,在为第一个标准(使用过滤器)进行子集设置之后,数据帧只包含过滤后的行,我无法应用剩余的标准进行子集和分类。我可能可以使用一个临时的df和rbind(),但我认为可以用一种更优雅的方法,只使用tidyverse语法。简而言之,我只想更新与我的条件匹配的行,而在原始DF中所有其他行保持不变。我应该用dplyr语法来做。可能吗

# with base R
    mydata$mytype = "NA"
    mydata$mytype[which(mydata$field1 > 300)] = "type1"
    mydata$mytype[which(mydata$field1 <= 300 & mydata$field1 > 200)] = "type2"

# with dplyr/tidyverse?
    library(tidyverse)
    mydata<-mydata%>% mutate(mytype = "NA")
    mydata<-mydata%>%filter(field1>300) %>% mutate(mytype="type1") 
    mydata<-mydata%>%filter(field1 >200, field1<=300) %>% mutate(mytype="type2")  #0 rows now
#带基数R
mydata$mytype=“NA”
mydata$mytype[其中(mydata$field1>300)]=“类型1”
mydata$mytype[其中(mydata$field1 200)]=“类型2”
#使用dplyr/tidyverse?
图书馆(tidyverse)
mydata%变异(mytype=“NA”)
mydata%过滤器(字段1>300)%%>%变异(mytype=“type1”)
mydata%过滤器(field1>200,field1%变异(mytype=“type2”)#现在0行

一个选项是使用
cut
作为:

df$mytype  <- cut(df$field1, breaks = c(-Inf,201,301,+Inf), 
                        labels = c("NA", "Type2", "Type1"))
使用dplyr,您可以:

1-将“中断”设置为“字段1”及其“标签”


中断谢谢,这是另一种选择。虽然我正在学习dplyr,但我想了解如何通过dplyr语法只更新与我的条件匹配的行,而在原始df中保留所有其他行不变。不知道这是否可能。当
dplyr
函数中的
情况下,您知道吗de>?dplyr::case\u when
case\u when工作正常!谢谢
cut(c(100, 190, 250, 260, 310), breaks = c(-Inf,201,301,+Inf), 
                labels = c("NA", "Type2", "Type1"))
#[1] NA    NA    Type2 Type2 Type1
#Levels: NA Type2 Type1
breaks <- c(-Inf, 200, 300)

labels <- c("type1", "type2)
df <- df %>% mutate(category=cut(field1, breaks= breaks, labels= labels))