小编Dav*_*ger的帖子

ggplot2:将不连续的持续时间绘制为条形图

我正在使用 ggplot 将各种事件绘制为它们开始的日期(x 轴)和开始时间(y 轴)的函数。数据/代码如下:

date<-c("2013-06-05","2013-06-05","2013-06-04","2013-06-04","2013-06-04","2013-06-04","2013-06-04",
    "2013-06-04","2013-06-04","2013-06-03","2013-06-03","2013-06-03","2013-06-03","2013-06-03",
    "2013-06-02","2013-06-02","2013-06-02","2013-06-02","2013-06-02","2013-06-02","2013-06-02")
start <-c("07:36:00","01:30:00","22:19:00","22:12:00","20:16:00","19:19:00","09:00:00",
     "06:45:00","01:03:00","22:15:00","19:05:00","08:59:00","08:01:00","07:08:00",
     "23:24:00","20:39:00","18:53:00","16:57:00","15:07:00","14:33:00","13:24:00")
duration <-c(0.5,6.1,2.18,0.12,1.93,0.95,10.32,
         2.25,5.7,2.78,3.17,9.03,0.95,0.88,
         7.73,2.75,1.77,1.92,1.83,0.57,1.13)
event <-c("AF201","SS431","BE201","CD331","HG511","CD331","WQ115",
      "CD331","SS431","WQ115","HG511","WQ115","CD331","AF201",
      "SS431","WQ115","HG511","WQ115","CD331","AS335","CD331")

df<-data.frame(date,start,duration,event)

library(ggplot2)
library(scales)

p <- ggplot(df, aes(as.Date(date),as.POSIXct(start,format='%H:%M:%S'),color=event))
p <- p+geom_point(alpha = I(6/10),size=5) 
p + ylab("time (hr)") + xlab("date") + scale_x_date(labels = date_format("%m/%d")) +
scale_y_datetime(labels = date_format("%H"))+
scale_colour_hue(h=c(360, 90))
theme(axis.text.x = element_text(hjust=1, angle=0))  
Run Code Online (Sandbox Code Playgroud)

结果图如下所示:

在此处输入图片说明

问题:不是简单地用一个点(如上所示)指示事件的开始时间,我如何绘制跨越事件持续时间的条形图?如上面的数据框所示,我有这个持续时间数据(以小时为单位)。或者,我可以提供“停止时间”(未显示)。

我想象这个解决方案看起来像一个堆积的条形图。但是,条形图并不完全正确,因为它假定条形图从图的底部开始,并且垂直堆叠的事件之间没有间隙。我的事件可能是不连续的——在沿 y 轴的不同位置“开始”和“停止”。解决方案还必须考虑到 1) 某些事件最终可能是并发的(时间重叠)和 2) 某些事件将跨越多天。

如有任何建议,我将不胜感激!

r ggplot2

5
推荐指数
2
解决办法
3686
查看次数

R(正则表达式)中管道操作中不包含单词的子集向量

如何为在管道操作中不包含单词的元素的向量进行子集化?(我真的很喜欢管道)

我希望有一些方法可以反转str_subset.在下面的示例中,我只想返回第二个元素x而不是元素hi:

library(stringr)
x <- c("hi", "bye", "hip")
x %>% 
    str_dup(2) %>%  # just an example operation
    str_subset("hi")  # I want to return the inverse of this
Run Code Online (Sandbox Code Playgroud)

regex r piping stringr

5
推荐指数
1
解决办法
348
查看次数

选择 group_by 中的值并根据 R 中的另一列值进行汇总

在以下示例中,我将如何根据另一列 ( ) 中的条件为mpg每组 ( ) 选择一个值(从 )。请注意,我还想总结另一个变量(每组的平均值)。我的最佳猜测如下:cylcarb == 1qsec

library(dplyr)
mtcars %>% 
    distinct(cyl, carb, .keep_all = TRUE) %>% 
    group_by(cyl) %>% 
    summarize(
        mpg = mpg[.$carb == 1],
        qsec = mean(qsec)
    )
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse

5
推荐指数
1
解决办法
4163
查看次数

R的toTitleCase()对单词“ all”不起作用

由于某种原因,R的toTitleCase()功能无法在单词“ all”上使用。有什么想法吗?

library(tools)
toTitleCase("all")  # gives "all"
toTitleCase("alt")  # gives "Alt"
Run Code Online (Sandbox Code Playgroud)

r

4
推荐指数
1
解决办法
275
查看次数

grep的值= TRUE是否有一个等效的字符串?

是否有一个stringr等效grepvalue设置为TRUE?(我想避免下面NAstringr命令返回的。)

library(stringr)
x <- c("a", "b", "a")
grep("a", x, value = TRUE)  # returns "a" "a"
str_extract(x, "a")  # returns "a" NA  "a"
Run Code Online (Sandbox Code Playgroud)

r stringr

4
推荐指数
1
解决办法
249
查看次数

如何打印 purrr::map 在 R 中作用的数据帧行

我正在使用purrr::map在长数据框列表列上运行耗时的函数,并且我想打印正在执行的行的指示器,以便我可以跟踪进度。

这是一个小例子:

当我运行这个:

library(dplyr)
library(tidyr)
library(purrr)
mtcars %>% 
    group_by(carb) %>% 
    nest() %>% 
    mutate(n = map(data, nrow))
Run Code Online (Sandbox Code Playgroud)

我想输出carb正在执行的行的:

#> 4
#> 1
#> 2
#> 3
#> 6
#> 8
Run Code Online (Sandbox Code Playgroud)

您可以通过使用这样的for循环来获得:

df <-
    mtcars %>% 
    group_by(carb) %>% 
    nest() %>% 
    mutate(n = NA)
for (i in 1:nrow(df)) {
    print(df$carb[i])
    df$n[i] <- list(nrow(df$data[[i]]))
}
Run Code Online (Sandbox Code Playgroud)

for-loop r purrr tidyverse

3
推荐指数
1
解决办法
643
查看次数

将geom_text与geom_jitter点对齐

如何在R中的下图中将文本标签与抖动点对齐(沿x轴尺寸)ggplot2

library(dplyr)
library(ggplot2)
mtcars %>% 
    ggplot(aes(am, wt, group = am, label = wt)) +
    geom_boxplot(outlier.shape = NA) +
    geom_jitter() +
    geom_text()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

r ggplot2

3
推荐指数
1
解决办法
536
查看次数

如何在保留所有不同的行时指定要排除的列?

如何通过仅指定要排除的列来保留数据框中排除某些列的所有不同行.在下面的例子中

library(dplyr)
dat <- data_frame(
    x = c("a", "a", "b"),
    y = c("c", "c", "d"),
    z = c("e", "f", "f")
)
Run Code Online (Sandbox Code Playgroud)

我想返回一个包含变量中所有不同行的数据框,x并且y只指定我要排除列z.返回的数据框应该类似于从此处返回的数据框

dat %>% distinct(x, y)
Run Code Online (Sandbox Code Playgroud)

你会认为你可以做到以下几点,但它会导致错误

dat %>% distinct(-z)
Run Code Online (Sandbox Code Playgroud)

我更喜欢整齐的解决方案

r dplyr tidyverse

2
推荐指数
1
解决办法
131
查看次数

标签 统计

r ×8

tidyverse ×3

dplyr ×2

ggplot2 ×2

stringr ×2

for-loop ×1

piping ×1

purrr ×1

regex ×1