【问题标题】:creating a new column containing plotmath expression using `dplyr::case_when`使用`dplyr::case_when`创建一个包含绘图表达式的新列
【发布时间】:2018-06-27 01:47:25
【问题描述】:

我想创建一个包含 plotmath 表达式的新列,我稍后计划在分析管道的其他地方使用它。

这是我尝试过的一个最小示例。例如,我在这里尝试创建一个名为 label 的新列,该列将根据 y 列的值具有不同的绘图表达式。

这似乎不起作用:

# loading needed libraries
library(tidyverse)

# creating a dataframe
df <- data.frame(x = c(1:10), y = c(rep("a", 5), rep("b", 5))) %>%
  tibble::as_data_frame(x = .)

# adding a new column with plotmath expression
df %>%
  dplyr::mutate(.data = .,
                label = dplyr::case_when(
                  y == "a" ~ paste(list(
                  "'This is'", "~alpha==", 1
                ), sep = ""),
                y == "b" ~ paste(list(
                  "'This is'", "~beta==", 2
                ), sep = "")))
#> Error in mutate_impl(.data, dots): Evaluation error: `y == "a" ~ paste(list("'This is'", "~alpha==", 1), sep = "")`, `y == "b" ~ paste(list("'This is'", "~beta==", 2), sep = "")` must be length 10 or one, not 3.

reprex package (v0.2.0) 于 2018 年 6 月 26 日创建。

【问题讨论】:

  • 您在致电case_when 时想要做什么?这对我来说并不明显。
  • @TimBiegeleisen 在这里,我正在尝试创建一个名为 label 的新列,该列将根据 y 列的值具有不同的绘图表达式。
  • 您需要为paste() 使用collapse = 参数而不是sep
  • 当您使用sep 时,您最终会得到一个与列表长度相同的向量。使用collapse 将意味着您将得到一个长度为 1 的向量
  • @alexwhan 成功了!你能发布你的答案和解释,我会接受它作为答案。谢谢!

标签: r dplyr tidyverse tibble plotmath


【解决方案1】:

错误信息显示每个case返回长度为3。这是因为当你paste()使用sep的列表时,你会得到一个与列表长度相同的向量,所以

paste(list(
              "'This is'", "~alpha==", 1
            ), sep = "")

返回一个长度为 3 的向量,而不是所需的 1 或 10。相反,如果您使用 paste()collapse 参数,您将获得长度为 1 的向量。在上下文中:

df %>%
  dplyr::mutate(.data = .,
            label = dplyr::case_when(
              y == "a" ~ paste(list(
                "'This is'", "~alpha==", 1
              ), collapse = ""),
              y == "b" ~ paste(list(
                "'This is'", "~beta==", 2
              ), collapse = "")))
# A tibble: 10 x 3
#       x y     label             
#   <int> <fct> <chr>             
# 1     1 a     'This is'~alpha==1
# 2     2 a     'This is'~alpha==1
# 3     3 a     'This is'~alpha==1
# 4     4 a     'This is'~alpha==1
# 5     5 a     'This is'~alpha==1
# 6     6 b     'This is'~beta==2 
# 7     7 b     'This is'~beta==2 
# 8     8 b     'This is'~beta==2 
# 9     9 b     'This is'~beta==2 
#10    10 b     'This is'~beta==2

【讨论】:

    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多