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

Dplyr-错误:列'';具有不支持的类型,r,dataframe,aggregate-functions,dplyr,R,Dataframe,Aggregate Functions,Dplyr,当在data.frame上使用dplyr来计算每组字符变量的缺失观测数时,我遇到了一个奇怪的问题。这将创建错误“错误:列“”的类型不受支持” 为了复制它,我创建了一个子集。子集rdata文件在此处可用: 首先,使用我提供的子集,代码: dftest %>% group_by(file) %>% summarise(missings=sum(is.na(v131))) 将创建错误: 错误:“文件”列的类型不受支持 str(dftest)返回: 但是,获取子集的子集并再次运行d

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

为了复制它,我创建了一个子集。子集rdata文件在此处可用: 首先,使用我提供的子集,代码:

dftest %>%
  group_by(file) %>%
  summarise(missings=sum(is.na(v131)))
将创建错误: 错误:“文件”列的类型不受支持

str(dftest)返回:

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

dftest <- dftest[1:756345,]
dftest %>%
  group_by(file) %>%
  summarise(missings=sum(is.na(v131)))
任何人都对可能导致此错误的原因以及如何处理有任何建议。在我的原始文件中,我有300个变量,dplyr声明其中大多数是不受支持的类型


谢谢。

当数据框的列具有属性时,使用
过滤器似乎会出现问题。例如

> df = data.frame(x=1:10, y=1:10)
> filter(df, x==3) # Works
  x y
1 3 3
x
列中添加一个属性。请注意
str(df)
现在将
x
显示为
atomic
,并且
filter
不起作用:

> 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

如何创建
dftest
?我从未见过data.frame中列为“原子”的列“。这似乎是一个格式错误的data.frame.Yes@MrFlick,有些地方不对劲。dftest来自一个名为df的data.frame,它是将许多STATA文件附加在一起的结果。但是,由于某些因子标签的字符串长度为0,因此我将其更改为字符串长度1。显然,这段代码产生了一个问题:
对于(x-in(names(df)){print(x)dflevels,这段代码没有任何意义。您只是想用一个空格替换零长度标签?对于(x-in-names(df))levels(df[[x]])如何我不确定为什么你的意思是代码没有任何意义。它是一个for循环,遍历每个变量名,检查是否有长度为0的级别。因此,此代码
levels(df[[x]])[levels(df[[x]])==“”]每次从SPSS读取数据库时,我都会面临相同的问题。目前,我将所有因子变量转换为字符。但这不是一个理想的解决方案,我同意。谢谢。这似乎是合适的解决方案。我将看看这是否解决了我的问题,并接受答案。
> 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