【问题标题】:case_when() not working: Error in mutate_impl(.data, dots) [closed]case_when()不起作用:mutate_impl(.data,dots)中的错误[关闭]
【发布时间】:2019-05-12 10:35:38
【问题描述】:

当我运行下面的代码时,我得到了这个错误:

mutate_impl(.data, dots) 中的错误:列 den 的长度必须为 2 (组大小)或一个,而不是 20000

这是我的示例数据和代码:

mydata<-structure(list(condition = c("A", "B", "C", "D", "E", "A", "B", 
    "C", "D", "E"), r_condition = c(-0.753941712419928, 0.18796391661835, 
    1.07774993391177, 0.141452804751733, -1.67697957194689, -0.730021740287756, 
    0.30088191760836, 0.820982130392851, 0.20992883143208, -1.75797911497123
    ), den_a = c(-1106.36423037457, -1106.36423037457, -1106.36423037457, 
    -1106.36423037457, -1106.36423037457, -1106.36423037457, -1106.36423037457, 
    -1106.36423037457, -1106.36423037457, -1106.36423037457), den_b = c(1013.85560135413, 
    1013.85560135413, 1013.85560135413, 1013.85560135413, 1013.85560135413, 
    1013.85560135413, 1013.85560135413, 1013.85560135413, 1013.85560135413, 
    1013.85560135413), den_c = c(4340.91752722743, 4340.91752722743, 
    4340.91752722743, 4340.91752722743, 4340.91752722743, 4340.91752722743, 
    4340.91752722743, 4340.91752722743, 4340.91752722743, 4340.91752722743
    ), den_d = c(1078.95631612632, 1078.95631612632, 1078.95631612632, 
    1078.95631612632, 1078.95631612632, 1078.95631612632, 1078.95631612632, 
    1078.95631612632, 1078.95631612632, 1078.95631612632), den_e = c(-6530.58467431366, 
    -6530.58467431366, -6530.58467431366, -6530.58467431366, -6530.58467431366, 
    -6530.58467431366, -6530.58467431366, -6530.58467431366, -6530.58467431366, 
    -6530.58467431366)), row.names = c(NA, -10L), class = c("grouped_df", 
    "tbl_df", "tbl", "data.frame"), vars = "condition", drop = TRUE, indices = list(
        c(0L, 5L), c(1L, 6L), c(2L, 7L), c(3L, 8L), c(4L, 9L)), group_sizes = c(2L, 
    2L, 2L, 2L, 2L), biggest_group_size = 2L, labels = structure(list(
        condition = c("A", "B", "C", "D", "E")), row.names = c(NA, 
    -5L), class = "data.frame", vars = "condition", drop = TRUE))

mydata%>% mutate(den = case_when (
       mydata$condition=="E" ~ mydata$den_e, 
       mydata$condition=="D" ~ mydata$den_d,
       mydata$condition=="C" ~ mydata$den_c, 
       mydata$condition=="B" ~ mydata$den_b,
       mydata$condition=="A" ~ mydata$den_a))

herehere 已经讨论了类似的问题,但这些都没有涉及 case_when

任何帮助将不胜感激。

【问题讨论】:

  • 在 dplyr 中,您不使用 mydata$condition,而只使用 conditionden 而不是 mydata$den。这就是您的错误的来源。
  • 谢谢,@phiver。但是当我不在dplyr 中使用 mydata$condition 时,我得到一个空列den。有什么解决办法吗?
  • 删除所有对mydata$ 的引用,您的代码将运行良好。至少在给出的示例数据中
  • 谢谢@phiver。让我更新这个问题。删除对mydata$ 的所有引用会得到一个空列den
  • @Krantz 我只是复制并粘贴然后从case_when 中删除了mydata 的所有实例,就像@phiver 建议的那样。 den 列在那里并且有值。

标签: r dataframe dplyr plyr tidyverse


【解决方案1】:

您是否尝试过重新启动 R 会话?因为对我来说,它似乎可以使用 phiver 建议的默认 dplyr 表示法。

library(tidyverse)

mydata<-structure(list(condition = c("A", "B", "C", "D", "E", "A", "B", "C", "D", "E"), r_condition = c(-0.753941712419928, 0.18796391661835, 1.07774993391177, 0.141452804751733, -1.67697957194689, -0.730021740287756, 0.30088191760836, 0.820982130392851, 0.20992883143208, -1.75797911497123), den_a = c(-1106.36423037457, -1106.36423037457, -1106.36423037457, -1106.36423037457, -1106.36423037457, -1106.36423037457, -1106.36423037457, -1106.36423037457, -1106.36423037457, -1106.36423037457), den_b = c(1013.85560135413, 1013.85560135413, 1013.85560135413, 1013.85560135413, 1013.85560135413, 1013.85560135413, 1013.85560135413, 1013.85560135413, 1013.85560135413, 1013.85560135413), den_c = c(4340.91752722743, 4340.91752722743, 4340.91752722743, 4340.91752722743, 4340.91752722743, 4340.91752722743, 4340.91752722743, 4340.91752722743, 4340.91752722743, 4340.91752722743), den_d = c(1078.95631612632, 1078.95631612632, 1078.95631612632, 1078.95631612632, 1078.95631612632, 1078.95631612632, 1078.95631612632, 1078.95631612632, 1078.95631612632, 1078.95631612632), den_e = c(-6530.58467431366, -6530.58467431366, -6530.58467431366, -6530.58467431366, -6530.58467431366, -6530.58467431366, -6530.58467431366, -6530.58467431366, -6530.58467431366, -6530.58467431366)), row.names = c(NA, -10L), class = c("grouped_df", "tbl_df", "tbl", "data.frame"), vars = "condition", drop = TRUE, indices = list(c(0L, 5L), c(1L, 6L), c(2L, 7L), c(3L, 8L), c(4L, 9L)), group_sizes = c(2L, 2L, 2L, 2L, 2L), biggest_group_size = 2L, labels = structure(list(condition = c("A", "B", "C", "D", "E")), row.names = c(NA, -5L), class = "data.frame", vars = "condition", drop = TRUE))

x <- mydata%>% mutate(den = case_when (
  condition=="D" ~ den_d,
  condition=="C" ~ den_c, 
  condition=="E" ~ den_e, 
  condition=="B" ~ den_b,
  condition=="A" ~ den_a))

x
#> # A tibble: 10 x 8
#> # Groups:   condition [5]
#>    condition r_condition  den_a den_b den_c den_d  den_e    den
#>    <chr>           <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>
#>  1 A              -0.754 -1106. 1014. 4341. 1079. -6531. -1106.
#>  2 B               0.188 -1106. 1014. 4341. 1079. -6531.  1014.
#>  3 C               1.08  -1106. 1014. 4341. 1079. -6531.  4341.
#>  4 D               0.141 -1106. 1014. 4341. 1079. -6531.  1079.
#>  5 E              -1.68  -1106. 1014. 4341. 1079. -6531. -6531.
#>  6 A              -0.730 -1106. 1014. 4341. 1079. -6531. -1106.
#>  7 B               0.301 -1106. 1014. 4341. 1079. -6531.  1014.
#>  8 C               0.821 -1106. 1014. 4341. 1079. -6531.  4341.
#>  9 D               0.210 -1106. 1014. 4341. 1079. -6531.  1079.
#> 10 E              -1.76  -1106. 1014. 4341. 1079. -6531. -6531.

reprex package (v0.2.1) 于 2018 年 12 月 11 日创建

【讨论】:

    【解决方案2】:

    你只是有一些错误,这段代码效果很好:

    mydata <- mydata%>% mutate(den = case_when (
      condition=="E" ~ den_e, 
      condition=="D" ~ den_d,
      condition=="C" ~ den_c, 
      condition=="B" ~ den_b,
      condition=="A" ~ den_a))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多