【问题标题】:R boxplot Subset column based on value in another columnR boxplot 基于另一列中的值的子集列
【发布时间】:2021-06-22 18:00:00
【问题描述】:

我需要一些帮助来完成大型搜索!

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

我的数据集如下所示:

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()

【问题讨论】:

    标签: r ggplot2 subset


    【解决方案1】:

    根据“术语”分组的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()
    

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢@ThomasIsCoding,这在测试数据集中的列是布尔值的情况下非常有效 - 但由于某种原因,我似乎无法将数据框中的实际列转换为布尔值以使其正常工作。跨度>
    • @Keelin 那么你可以在ave中使用TRUE. == "True"
    【解决方案3】:

    Base R 一班轮:

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

    【讨论】:

    • 令人印象深刻的基础 R 一个班轮,点赞!但是我认为您需要稍微更改subset = TRUE.,因为如果至少有一个True,OP 想要保留该组。
    • @ThomasIsCoding 谢谢! +1 对你来说,我也总是喜欢你的 Base R 解决方案的简洁和高效。相应地在上面进行了编辑。
    猜你喜欢
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2014-12-08
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多