dplyr安排动词不适用于角色类,仅适用于因素

时间:2018-05-31 19:20:43

标签: r dplyr

library(tidyverse)
df <- structure(list(PN = c("41681", "16588", "34881", 
"36917", "33116", "68447"), `2017-10` = c(0L, 
0L, 0L, 0L, 0L, 0L), `2017-11` = c(0L, 1L, 0L, 0L, 0L, 0L), `2017-12` = c(0L, 
0L, 0L, 0L, 1L, 0L), `2018-01` = c(0L, 0L, 1L, 1L, 0L, 0L), `2018-02` = c(1L, 
0L, 0L, 0L, 0L, 0L), `2018-03` = c(0L, 0L, 0L, 0L, 0L, 0L), `2018-04` = c(0L, 
0L, 0L, 0L, 0L, 1L), Status = c("OK", "NOK", "OK", "NOK", "OK", 
"OK")), .Names = c("PN", "2017-10", "2017-11", "2017-12", 
"2018-01", "2018-02", "2018-03", "2018-04", "Status"), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

上面Status数据框中的df列是使用以下应用函数生成的:

mutate(
  Status = 
    ifelse(
      (apply(.[, 2:7], 1, sum) > 0) & 
        (.[, 8] > 0), 
      "NOK", 
      "OK"
      )
)

如果我%>%在上面的代码块之后直接管道arrange(Status),我会收到以下错误。

  

arrange_impl(.data,dots)出错:参数1不受支持   类型矩阵

如果我在没有arrange(Status)的情况下运行我的所有代码,代码就可以正常执行并转换为我在本文开头设置的可重现块 - 通过dput(df)

Status列的类型为字符,但如果我在运行arrange(Status)命令之前将其考虑在内,则上面显示的错误就会消失。

我在角色课之前从未遇到arrange()动词的问题。为什么我被迫将我的状态列放在一起以使错误消失?这与我使用apply命令有关吗?这是我这次“编程”中唯一的新事物。

1 个答案:

答案 0 :(得分:1)

在我的分析中,我不得不将NA替换为0,这就是我所做的:

mutate(n = parse_integer(str_replace_na(n, replacement = 0)))

显然我最终创建了一列字符矩阵,可能使用此apply命令,可能使用上面的stringR命令,不知道哪个:

mutate(
  Status = 
    ifelse(
      (apply(.[, 2:7], 1, sum) > 0) & 
        (.[, 8] > 0), 
      "NOK", 
      "OK"
      )
)

正如@joran和@akrun指出的那样,以下问题解决了这个问题:

mutate(Status = as.vector(Status))