小编Nil*_*ils的帖子

如何在R中用一个case_when表达式改变两列?

根据一列中的文本,我想为另外两列分配一个字符和一个整数。用于将字符分配给一列和整数分配给另一列的多个 case_when 条件 (LHS) 相等,只有结果 (RHS) 不同。我正在使用exprsand!!!因为我只想在一个表中维护表达式列表的基础。

我的代码是:

library(rlang)
library(tidyverse)

df <- data.frame(a=c("text-1" , "text_2", "text3"))

e1 <- 
  exprs(
    grepl("text-", a) ~ "a",
    grepl("text_", a) ~ "b",
    grepl("text[0-9]", a) ~ "c"
  )

e2 <- 
  exprs(
    grepl("text-", a) ~ 0,
    grepl("text_", a) ~ 1,
    grepl("text[0-9]", a) ~ 2
  )

test <- df %>% mutate(b=case_when(!!!e1),
                      c=case_when(!!!e2)
)
Run Code Online (Sandbox Code Playgroud)

预期结果是:

> test
       a b c
1 text-1 a 0
2 text_2 b 1
3  text3 c 2
Run Code Online (Sandbox Code Playgroud)

但是使用两个具有相同 LHS 的 …

r case-when mutate

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

scale_x_date (ggplot) 中的限制参数仍然产生 data.frame 范围之外的日期

我的 data.frame 看起来像:

df <- data.frame(date=as.Date(c("2017-12-01", "2018-01-01", "2018-02-01")), value=c(1, 2, 3))
Run Code Online (Sandbox Code Playgroud)

当用 ggplot 绘制一条线时

library(ggplot2)
ggplot(data=df, aes(x=date, y=value)) +
geom_line() + 
scale_x_date(date_breaks = "day", limits = c(min(df$date), max(df$date))) +
theme(axis.text.x=element_text(angle=90, vjust = 0.5))
Run Code Online (Sandbox Code Playgroud)

给出:

在此处输入图片说明

我希望通过设置限制(limits = c(min(df$date), max(df$date))在 ggplot 命令中 ),2017 年 11 月和 2018 年 2 月的额外日期会消失,但事实并非如此。

我实际上可以使用 将情节限制为“2017-12-01”和“2018-02-01”scale_x_date吗?或者我是否必须取消日期功能以将两端的绘图限制为我的 data.frame 中的日期?

limits r graph line ggplot2

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

标签 统计

r ×2

case-when ×1

ggplot2 ×1

graph ×1

limits ×1

line ×1

mutate ×1