spe*_*seh 3 r aggregate-functions dataframe dplyr
在data.frame上使用dplyr来计算每个字符变量组的缺失观察数时,我有一个奇怪的问题.这会创建错误"错误:列""具有不受支持的类型.
为了复制它,我创建了一个子集.子集rdata文件在这里可用: rdata文件包括dftest data.frame First.使用我提供的子集,代码:
dftest %>%
group_by(file) %>%
summarise(missings=sum(is.na(v131)))
Run Code Online (Sandbox Code Playgroud)
将创建错误:错误:列'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 ...
Run Code Online (Sandbox Code Playgroud)
但是,获取子集的子集并再次运行dplyr命令将创建预期输出.
dftest <- dftest[1:756345,]
dftest %>%
group_by(file) %>%
summarise(missings=sum(is.na(v131)))
Run Code Online (Sandbox Code Playgroud)
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 ...
Run Code Online (Sandbox Code Playgroud)
任何人都有任何关于可能导致此错误的建议,以及该如何处理.在我的原始文件中,我有300个变量,而dplyr声明其中大多数都是不受支持的类型.
谢谢.
filter当数据框的列具有属性时,这似乎是一个问题.例如,
> df = data.frame(x=1:10, y=1:10)
> filter(df, x==3) # Works
x y
1 3 3
Run Code Online (Sandbox Code Playgroud)
向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
Run Code Online (Sandbox Code Playgroud)
要使其工作,请删除该属性:
> attr(df$x, 'width') = NULL
> filter(df, x==3)
x y
1 3 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13832 次 |
| 最近记录: |