【问题标题】:R-Error: data_frames can only contain 1d atomic vectors and listsR-Error:data_frames 只能包含 1d 原子向量和列表
【发布时间】:2016-03-30 08:16:39
【问题描述】:

我正在尝试应用 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)
}

显示的错误是 Error: data_frames can only contain 1d atomic vectors and lists.

当我这样做时: lapply(complete.dupremoved,class)

有些列是 numeric 、 factor 、 character 、 integer 。任何解决方案如何解决这个问题? 调试器还提供以下内容:

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
}

【问题讨论】:

  • 你能举一个你的数据的小例子来重现错误吗?
  • '因子'-向量不是原子的。
  • @42-,但is.atomic(factor("a")) 返回TRUE..?
  • 我想我很困惑。我认为具有额外属性的向量不是“原子的”。注意is.vector( factor("a") ) 返回[1] FALSE。因此,请遵循?is.atomic 页面中的这句话:“通常将原子类型称为‘原子向量’,但请注意 is.vector 施加了进一步的限制:对象可以是原子的,但不能是向量(在这个意义上)。 "我特此将我的评论修改为“因素不是原子向量”。
  • @42-,这很有趣。我也刚刚了解到不可能做到vector(mode = "factor", 0)。无论如何,关于错误消息,它可能与因素无关,因为允许data_frame(x = factor(1))

标签: r dplyr plyr


【解决方案1】:

此错误的原因是该函数正在创建一个数据帧作为原始数据帧中的变量。这是执行此操作的行:

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

以后你可以用这个检查你的数据框来识别每个变量的类:

sapply(your_df_here, class)

抛开主要问题不谈,我希望您能够按因子计算条目。有几个现有的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2015-12-28
    • 2015-09-09
    • 2021-05-22
    • 1970-01-01
    • 2020-04-27
    相关资源
    最近更新 更多