如何在R中为数据集的每一行打印箱形图?

时间:2018-08-26 15:25:39

标签: r plot boxplot

这是一个示例数据,我想知道如果要在R中分别对Day1,Day2 ... Day6进行盒装库存1,库存2,库存3和库存4,该怎么办?

head(StockExample)
    X1 Stock1 Stock2 Stock3 Stock4
1 Day1 185.74   1.47   1605  95.05
2 Day2 184.26   1.56   1580  97.49
3 Day3 162.21   1.39   1490  88.57
4 Day4 159.04   1.43   1520  85.55
5 Day5 164.87   1.42   1550  92.04
6 Day6 162.72   1.36   1525  91.70

因此,每天有6个箱型图,每个箱型图中都有1-4个库存。希望我有道理。另外,我可以使用apply函数吗?

我试图寻找答案,但无法正确解决。感谢这方面的帮助。非常感谢!

4 个答案:

答案 0 :(得分:0)

开发一个好的做法是“收集”库存列。像下面这样的东西应该起作用。 (但我尚未对此进行测试。)

require(tidyverse)
require(stringr)

StockExample %>% 
    tidyr::gather(key = "Stock", value = "value", -X1) %>% 
    dplyr::mutate(day = stringr::str_replace(X1, "Day", "") %>% as.numeric() ) %>% 
    dplyr::mutate(Stock = stringr::str_replace(Stock, "Stock", "") %>% as.numeric() ) %>%
    ggplot(aes(x = day, y = value)) +
    geom_boxplot()

(上面的代码使用范围packagename::functionname来指示tidyverse中用于执行某些操作的特定功能。

答案 1 :(得分:0)

有多种方法可以执行此操作,以上两种都要求数据采用长格式。
为了重新格式化数据,我将使用软件包melt中的函数reshape2

long <- reshape2::melt(StockExample, id.var = "X1")

现在显示图形。

首先,使用基本R图形。

boxplot(value ~ X1, long)

其次,使用软件包ggplot2

library(ggplot2)

ggplot(long, aes(X1, value)) +
    geom_boxplot()

数据。

StockExample <-
structure(list(X1 = structure(1:6, .Label = c("Day1", "Day2", 
"Day3", "Day4", "Day5", "Day6"), class = "factor"), Stock1 = c(185.74, 
184.26, 162.21, 159.04, 164.87, 162.72), Stock2 = c(1.47, 1.56, 
1.39, 1.43, 1.42, 1.36), Stock3 = c(1605L, 1580L, 1490L, 1520L, 
1550L, 1525L), Stock4 = c(95.05, 97.49, 88.57, 85.55, 92.04, 
91.7)), class = "data.frame", row.names = c("1", "2", "3", "4", 
"5", "6"))

答案 2 :(得分:0)

您可以获取长格式的数据,然后使用.card p { font-size: 20px !important; } 很简单:

ggstatsplot

reprex package(v0.2.0.9000)创建于2018-08-26。

答案 3 :(得分:0)

最简单的解决方案可能是按行分割data.frame

byDay <- split(StockExample[,-1], StockExample$X1)

然后将所有这些转换为数字格式:

byDay <- lapply(byDay, as.numeric)

然后只需在其上调用boxplot

boxplot(byDay)

或将所有内容都放在一行中

boxplot(lapply(split(StockExample[,-1], StockExample$X1), as.numeric))

enter image description here