Столбец «скорость» должен иметь длину 1 (суммарное значение), а не 22906 - PullRequest
0 голосов
/ 10 июня 2018

У меня проблемы с приведенным ниже кодом.Возвращается

"Ошибка в summarise_impl (.data, точки): скорость столбца должна быть длиной 1 (суммарное значение), а не 22906"

Есть ли проблемыс моим кодом?

sub_grade имеет тип символа, а int_rate является числовым

results <- loan_data %>%
  select(credit_grade, sub_grade, int_rate, loan_amnt) %>%
  group_by(sub_grade) %>%
  summarise(
    rate = substr(int_rate * 100, 1, 4),
    nr_loans = n(),
    "&",
    percent1 = substr((nr_loans / a) * 100, 1, 5),
    klj = "&",
    Amount = sum(loan_amnt, na.rm = TRUE),
    klj1 = "&",
    percent2 = substr((Amount / total) * 100, 1, 5)
  )

Проблема появляется только при добавлении первой переменной rate.

Воспроизводимый пример:

sub_grade <- c("A1", "A2", "A3","A1","A3")
int_rate <– c(0.023, 0.027, 0.033,0.023,0.033)

Я хочу получить

sub_grade.  int_rate
  1. A1.0,023
  2. A2.0,027
  3. A3.0.033

Спасибо

1 Ответ

0 голосов
/ 10 июня 2018

Проблема в том, что dplyr::summarise ожидает / принимает одно значение на группу.Но substr(int_rate*100, ...) в вашем коде будет возвращать значение для каждой строки, т.е. много значений для группы.Вам нужно подумать об использовании некоторых группирующих функций, таких как min, max, first, last etc, как части substr.Учитывая пример данных, которые ОП опубликовал, решение может быть следующим:

# Data
sub_grade <- c("A1", "A2", "A3","A1","A3")
int_rate <- c(0.023, 0.027,0.033,0.023,0.033)

loan_data <- data.frame(sub_grade, int_rate, stringsAsFactors = FALSE)

# Use dplyr to summarise on sub_grade
library(dplyr)
loan_data %>% group_by(sub_grade) %>%
  summarise(int_rate = first(int_rate)) %>%
  as.data.frame()

#   sub_grade int_rate
# 1        A1    0.023
# 2        A2    0.027
# 3        A3    0.033
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...