web-dev-qa-db-ja.com

R-エラー:data_framesには1dアトミックベクトルとリストのみを含めることができます

次の関数を使用して、dplyrパッケージを適用し、データセット内の各カード番号のエントリ数を計算しようとしています。

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)
}

表示されるエラーはエラーです。data_framesには1dアトミックベクトルとリストのみを含めることができます。

私がするとき:lapply(complete.dupremoved、class)

一部の列は、数値、因数、文字、整数です。これを解決する方法はありますか?また、デバッガーは以下を提供します。

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
}
6
Prashanth

このエラーの理由は、関数が元のデータフレーム内の変数としてデータフレームを作成しているためです。これはそれを行う行です:

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

将来的には、これを使用してデータフレームをチェックし、各変数のクラスを特定できます。

sapply(your_df_here, class)

主な質問はさておき、エントリを係数で計算できたと思います。そこにいくつかの既存のオプションがあります。

7
Simon