R 根据另一列中的匹配条件筛选列

R 根据另一列中的匹配条件筛选列,r,filter,dplyr,R,Filter,Dplyr,我正在尝试使用dplyr执行一个简单的过滤,但它似乎不符合我想要做的 我想以仅当时间与类别匹配时基于时间过滤数据帧为例,然后查看列值 这似乎不是我真正想要得到的,因为我想将与T0值匹配的整行子集如果我理解正确,您可以使用subset函数 subset(df, Time == "T0" & Value < 5 | Time != "T0") dplyr 如果我理解正确,您可以使用subset函数 subset(df, Time == "T0" & Value < 5

我正在尝试使用dplyr执行一个简单的过滤,但它似乎不符合我想要做的

我想以仅当时间与类别匹配时基于时间过滤数据帧为例,然后查看列值


这似乎不是我真正想要得到的,因为我想将与T0值匹配的整行子集如果我理解正确,您可以使用subset函数

subset(df, Time == "T0" & Value < 5 | Time != "T0")
dplyr


如果我理解正确,您可以使用subset函数

subset(df, Time == "T0" & Value < 5 | Time != "T0")
dplyr


我想这会管用的

dates <- rep(
  seq(as.numeric(as.Date("01-01-2020", format = "%d-%m-%Y")),
      as.numeric(as.Date("01-10-2020", format = "%d-%m-%Y"))), 
  each = 24
)

value <- runif(length(dates), 1, 10)
time <- runif(length(dates), 0, 1) 

data <- cbind(dates, value, time)
data <- tibble::as_tibble(data)

out <- data %>% filter(value != 0 & time > 5)
isTRUE(sum(out$time < 5 | out$value == 0) == 0)
#[1] TRUE

!

我想这会管用的

dates <- rep(
  seq(as.numeric(as.Date("01-01-2020", format = "%d-%m-%Y")),
      as.numeric(as.Date("01-10-2020", format = "%d-%m-%Y"))), 
  each = 24
)

value <- runif(length(dates), 1, 10)
time <- runif(length(dates), 0, 1) 

data <- cbind(dates, value, time)
data <- tibble::as_tibble(data)

out <- data %>% filter(value != 0 & time > 5)
isTRUE(sum(out$time < 5 | out$value == 0) == 0)
#[1] TRUE

!

创建可在其上筛选的帮助器字段可能是最容易的

library(dplyr)

df %>%
  mutate(isFilter = case_when(Time == "T0" & Value > 5 ~ 1, TRUE ~ 0)) %>%
  filter(isFilter == 0)

SubjectID Treatment Time Value isFilter
1        B0   Control   T0   4.8        0
2        A3   Amutant   T3   4.0        0
3        B1   Control   T1   3.0        0
4        B3   Control   T3   6.5        0
5        C2   Bmutant   T2   2.0        0
6        C1   Bmutant   T1   3.0        0

创建可在其上进行筛选的帮助器字段可能是最容易的

library(dplyr)

df %>%
  mutate(isFilter = case_when(Time == "T0" & Value > 5 ~ 1, TRUE ~ 0)) %>%
  filter(isFilter == 0)

SubjectID Treatment Time Value isFilter
1        B0   Control   T0   4.8        0
2        A3   Amutant   T3   4.0        0
3        B1   Control   T1   3.0        0
4        B3   Control   T3   6.5        0
5        C2   Bmutant   T2   2.0        0
6        C1   Bmutant   T1   3.0        0

也许你只是在找这样的东西:df%>%filter Time==T0,Value,但我只需要看Value,也许你只是在找这样的东西:df%>%filter Time==T0,Value,但我只需要看类似于我上面回答的值,我只需要基于T0进行筛选,这不会影响其他时间值。最后一条语句可以简化为df%>%filterTime!=T0 | Value<5您能更详细地解释一下哪里出了问题吗?由于代码现在从T0中删除了值>5的值,而其他值保留下来。我认为查看数据集确实有效,非常感谢!!!:与我上面的回答类似,我只需要基于T0进行过滤,这不会影响其他时间值。最后一条语句可以简化为df%>%filterTime!=T0 | Value<5您能更详细地解释一下哪里出了问题吗?由于代码现在从T0中删除了值>5的值,而其他值保留下来。我认为查看数据集确实有效,非常感谢!!!:如果您只测试一个条件,那么最好使用基本ifelse;更好的是:isFilter=as.numericTime==T0&Value>5如果您只测试一个条件,那么最好使用基本ifelse;更好的是:isFilter=as.numericTime==T0&Value>5