首页 文章

Dplyr - 错误:列''具有不受支持的类型

提问于
浏览
2

在data.frame上使用dplyr来计算每个字符变量组的缺失观察数时,我有一个奇怪的问题 . 这会创建错误“错误:列”“具有不受支持的类型 .

为了复制它,我创建了一个子集 . 子集rdata文件可在此处获得:rdata file including dftest data.frame首先 . 使用我提供的子集,代码:

dftest %>%
  group_by(file) %>%
  summarise(missings=sum(is.na(v131)))

将创建错误:错误:列'file'具有不受支持的类型

str(dftest)返回:

'data.frame':   756345 obs. of  2 variables:
 $ file: atomic  bjir31fl.dta bjir31fl.dta bjir31fl.dta bjir31fl.dta ...
  ..- attr(*, "levels")= chr 
 $ v131: Factor w/ 330 levels "not of benin",..: 6 6 6 6 1 1 1 9 9 9 ...

但是,获取子集的子集并再次运行dplyr命令将创建预期输出 .

dftest <- dftest[1:756345,]
dftest %>%
  group_by(file) %>%
  summarise(missings=sum(is.na(v131)))

str(dftest)现在返回:

'data.frame':   756345 obs. of  2 variables:
 $ file: chr  "bjir31fl.dta" "bjir31fl.dta" "bjir31fl.dta" "bjir31fl.dta" ...
 $ v131: Factor w/ 330 levels "not of benin",..: 6 6 6 6 1 1 1 9 9 9 ...

任何人都有任何关于可能导致此错误的建议,以及该如何处理 . 在我的原始文件中,我有300个变量,而dplyr声明其中大多数都是不受支持的类型 .

谢谢 .

1 回答

  • 5

    当数据框的列具有属性时,这似乎是使用 filter 的问题 . 例如,

    > df = data.frame(x=1:10, y=1:10)
    > filter(df, x==3) # Works
      x y
    1 3 3
    

    将属性添加到 x 列 . 请注意 str(df) 现在显示 xatomicfilter 不起作用:

    > attr(df$x, 'width')='broad'
    > str(df)
    'data.frame':   10 obs. of  2 variables:
     $ x: atomic  1 2 3 4 5 6 7 8 9 10
      ..- attr(*, "width")= chr "broad"
     $ y: int  1 2 3 4 5 6 7 8 9 10
    > filter(df, x==3)
    Error: column 'x' has unsupported type
    

    要使其工作,请删除该属性:

    > attr(df$x, 'width') = NULL
    > filter(df, x==3)
      x y
    1 3 3
    

相关问题