2015-12-23 39 views
6

Próbuję zastosować pakiet dplyr i obliczyć liczbę wpisów do każdego numeru karty w zestawie danych z następujących funkcji:R-Error: data_frames może zawierać tylko 1d wektory atomowe i list

freq<- function(data){ 
    data <- complete.dupremoved[order(-complete.dupremoved$SUMMA),] 
    aggregate(count ~., data=transform(complete.dupremoved,count=1), length) 
    complete.dupremoved$count <-complete.dupremoved[complete.dupremoved$KLIENDIKAARDINR,] 
    sample <- count(complete.dupremoved, vars = "KLIENDIKAARDINR") 
    complete.dupremoved<- merge(complete.dupremoved,sample, by ="KLIENDIKAARDINR") 
    return(complete.dupremoved) 
} 

The wyświetlany błąd to Błąd: dane_ramki mogą zawierać tylko 1d wektorów atomowych i list.

Kiedy zrobić: lapply (complete.dupremoved, klasa)

Niektóre kolumny są numeryczne, czynniki, charakter, całkowitą. Jakieś rozwiązanie, jak to rozwiązać? także debugger daje następujące elementy:

function (x) 
{ 
    stopifnot(is.list(x)) 
    if (length(x) == 0) { 
     x <- list() 
     class(x) <- c("tbl_df", "tbl", "data.frame") 
     attr(x, "row.names") <- .set_row_names(0) 
     return(x) 
    } 
    names_x <- names2(x) 
    if (any(is.na(names_x) | names_x == "")) { 
     stop("All columns must be named", call. = FALSE) 
    } 
    ok <- vapply(x, is_1d, logical(1)) 
    **if (any(!ok)) { 
     stop("data_frames can only contain 1d atomic vectors and lists", 
      call. = FALSE)** 
    } 
    n <- unique(vapply(x, NROW, integer(1))) 
    if (length(n) != 1) { 
     stop("Columns are not all same length", call. = FALSE) 
    } 
    class(x) <- c("tbl_df", "tbl", "data.frame") 
    attr(x, "row.names") <- .set_row_names(n) 
    x 
} 
+2

Czy możesz podać mały przykład swoich danych, aby odtworzyć błąd? –

+0

Wektory "czynnikowe" nie są atomowe. –

+0

@ 42-, ale 'is.atomic (factor (" a "))' zwraca 'TRUE' ..? –

Odpowiedz

6

Przyczyną tego błędu jest to, że funkcja jest stworzenie dataframe jako zmienną w oryginalnym dataframe. Jest to linia, która robi:

complete.dupremoved$count <-complete.dupremoved[complete.dupremoved$KLIENDIKAARDINR,] 

W przyszłości można sprawdzić dataframe z tym zidentyfikować klasę każdej zmiennej:

sapply(your_df_here, class) 

Pytanie główny bok, mam nadzieję, że udało nam się obliczaj wpisy według współczynnika. Istnieje kilka istniejących opcji.