Получение факторной ошибки при агрегировании таблицы, но столбцы не являются факторами - PullRequest
0 голосов
/ 03 июля 2019

Итак, мои данные загружены из CSV-файла.Я попытался загрузить его с помощью stringsAsFactors = FALSE, но все равно получил ошибку.Первые 13 столбцов - это строки, остальные столбцы (начиная с 14) - числовые.Вот основной код:

library("readxl")

# Read data with facotr is False 
data <- read.csv("PFR csvData.csv",stringsAsFactors = FALSE)

# Convert all numeric rows to numeric
data[,14:length(colnames(data))]<- as.numeric(as.character(unlist(data[,14:length(colnames(data))])))

# Convert all string rows to characters
data[,1:13]<- as.character(unlist(data[,1:13]))

Когда я проверяю класс каждого столбца через sapply(data, class), я получаю:

           Rk           Player              Pos              Age             Date               Lg               Tm 
     "character"      "character"      "character"      "character"      "character"      "character"      "character" 
             H.A              Opp           Result               G.             Week              Day    Receiving_Tgt 
     "character"      "character"      "character"      "character"      "character"      "character"        "numeric" 
   Receiving_Rec    Receiving_Yds    Receiving_Y.R     Receiving_TD  Receiving_Ctch.  Receiving_Y.Tgt    Receiving_PPR 
       "numeric"        "numeric"        "numeric"        "numeric"        "numeric"        "numeric"        "numeric" 
     Passing_Cmp      Passing_Att     Passing_Cmp.      Passing_Yds       Passing_TD      Passing_Int     Passing_Rate 
       "numeric"        "numeric"        "numeric"        "numeric"        "numeric"        "numeric"        "numeric" 
      Passing_Sk   Passing_Sk_Yds      Passing_Y.A     Passing_AY.A      Passing_PPR      Rushing_Att      Rushing_Yds 
       "numeric"        "numeric"        "numeric"        "numeric"        "numeric"        "numeric"        "numeric" 
     Rushing_Y.A       Rushing_TD Rushing_Half_PPR   Total_Half_PPR 
       "numeric"        "numeric"        "numeric"        "numeric" 

Я также проверял на NA через apply(data, 2, function(x) any(is.na(x))) и получал:

              Rk           Player              Pos              Age             Date               Lg               Tm 
           FALSE            FALSE            FALSE            FALSE            FALSE            FALSE            FALSE 
             H.A              Opp           Result               G.             Week              Day    Receiving_Tgt 
           FALSE            FALSE            FALSE            FALSE            FALSE            FALSE            FALSE 
   Receiving_Rec    Receiving_Yds    Receiving_Y.R     Receiving_TD  Receiving_Ctch.  Receiving_Y.Tgt    Receiving_PPR 
           FALSE            FALSE            FALSE            FALSE            FALSE            FALSE            FALSE 
     Passing_Cmp      Passing_Att     Passing_Cmp.      Passing_Yds       Passing_TD      Passing_Int     Passing_Rate 
           FALSE            FALSE            FALSE            FALSE            FALSE            FALSE            FALSE 
      Passing_Sk   Passing_Sk_Yds      Passing_Y.A     Passing_AY.A      Passing_PPR      Rushing_Att      Rushing_Yds 
           FALSE            FALSE            FALSE            FALSE            FALSE            FALSE            FALSE 
     Rushing_Y.A       Rushing_TD Rushing_Half_PPR   Total_Half_PPR 
           FALSE            FALSE            FALSE            FALSE 

Итак, на данный момент, я думаю, что я загрузил свои данные без факторов, гарантирую, что все столбцы не являются факторами, приведя их типы в соответствие, и дважды проверим, посмотрев на класс каждого столбца.Я также удостоверился, что нет NA

Однако, когда я использую свою функцию агрегации, я получаю ошибку, связанную с факторами:

aggregate(data$Player, by = list(data$Total_Half_PPR), FUN = sum)
Error in Summary.factor(291L, na.rm = FALSE) : 
  ‘sum’ not meaningful for factors

Я не уверен, что еще делать.Любая помощь приветствуется!

1 Ответ

0 голосов
/ 03 июля 2019

«Игроком» является factor. Нам нужно конвертировать в numeric

data$Player <- as.numeric(as.character(data$Player))

Если нам нужно получить sum из Total_Half_PPR, сделайте это другим способом

aggregate(data$Total_Half_PPR, by = list(data$Player), FUN = sum)

или по формуле

aggregate(Total_Half_PPR ~ Player, data, FUN = sum)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...