R boxplot子集列基于另一列中的值

R boxplot Subset column based on value in another column

大搜索后我需要一些帮助!

我需要根据另一列数据对一列进行子集化。

我的数据集如下所示:

Term Name True Result
T1 Name1 True 4
T2 Name2 False 6
T3 Name3 True 5.5
T3 Name4 False 4.6
dataset <-
  structure(
    list(
      Term = c("T1", "T2", "T3", "T3"),
      Name = c("Name1",
               "Name2", "Name3", "Name4"),
      TRUE. = c(TRUE, FALSE, TRUE, FALSE),
      Result = c(4, 6, 5.5, 4.6)
    ),
    class = "data.frame",
    row.names = c(NA,-4L)
  )

我希望能够对箱线图进行子集化,以仅显示其中一条记录的值为 True 的项。

例如T1 的值为 True; T3 有两个值 - 一真一假。我希望 x 轴显示箱线图的 T1 和 T3:

  ggplot(dataset, aes(x=Term, y=Result)) + 
  geom_boxplot()

根据按 'Term' 分组的 any TRUE 值的存在对数据进行子集化,并将其用于 ggplot

library(dplyr)
library(ggplot2)
dataset %>% 
    group_by(Term) %>% 
    filter(any(TRUE.)) %>%
    ggplot(aes(x = Term, y = Result)) + 
       geom_boxplot()

或在 base R 中使用 subset

data_sub <-  subset(dataset, Term %in% unique(Term[TRUE.]))
ggplot(data_sub, aes(x=Term, y=Result)) + 
     geom_boxplot()

我猜你可以在 subset 中使用 ave,例如,

subset(
  dataset,
  ave(TRUE., Term, FUN = any)
) %>% ggplot(aes(x = Term, y = Result)) +
  geom_boxplot()

Base R 1 liner:

boxplot(Result~Term, data = dataset, subset = Term %in% unique(Term[TRUE.]))