首页 > 解决方案 > dplyr 中的排列错误:位置 1 的大小(1)不正确,预期:3947

问题描述

# 我一直试图让它工作好几天。没运气。每个#vector 的长度为 3947,我在 as.numeric、#as.data.frame 和输入之间进行了更改。欢迎大家提出意见。

#pulling data from outcomes on hospitals, with eventual attempt to return ranking based on this.
rankall<-function(outcome,num) {
  library(datasets)
  library(plyr)
  library(dplyr)
  data<-read.csv("outcome-of-care-measures.csv", na.strings="Not Available",
                 stringsAsFactors=FALSE)

  if (outcome == "pneumonia"){
    column_index<-23
  } else if (outcome == "heart attack") {
    column_index<-11
  } else if (outcome == "heart failure") {
    column_index<-17
  } else {
    stop("invalid outcome")
  } 

  data2<-cbind(data[,2],data[,7],data[,column_index])
  data2<-na.omit(data2)
  colnames(data2)<-c("hospital", "state", outcome)
  order1<-data2[order(as.numeric(data2[,outcome]), data2[,"hospital"]),]
  numrows<-nrow(order1)
  as.data.frame(order1) %>%
    arrange(outcome, .by_group=TRUE)

  print(class(data2[,"hospital"]))
  print(class(data2[,2]))
  print(class(data2[,3]))
}  

标签: rdplyr

解决方案


您需要将结果变成一个符号,它现在被视为一个字符串。见此。要纠正,请执行以下操作:

library(dplyr)

data2 = data.frame(x=runif(100),
hospital=sample(LETTERS,100,replace=TRUE),
"heart attack" = rbinom(100,1,0.5),
"pneumonia" = rbinom(100,1,0.5),check.names=FALSE)

outcome = "pneumonia"

data2 %>% arrange(outcome, .by_group=TRUE)
Error: incorrect size (1) at position 1, expecting : 100

data2 %>% arrange(!!sym(outcome), .by_group=TRUE)

              x hospital heart attack pneumonia
1   0.471584775        B            0         0
2   0.907479862        S            1         0
3   0.141569308        Q            0         0
4   0.511258807        A            0         0

推荐阅读