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命令有关吗?这是我这次“编程”中唯一的新事物。
答案 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))