dplyr 中的filter报错:Can‘t transform a data frame with duplicate names

背景

处理一个数据框,用filter进行筛选数据时,发现了这个报错:

aa1 %>% filter(POS_strt == “20696”)
Error in filter():
! Can’t transform a data frame with duplicate names.
Run rlang::last_error() to see where the error occurred.

根据提示运行:rlang::last_error(),也没有看到问题所在:

> rlang::last_error()
<error/rlang_error>
Error in `filter()`:
! Can't transform a data frame with duplicate names.
---
Backtrace:
 1. aa1 %>% filter(POS_strt == "20696")
 3. dplyr:::filter.data.frame(., POS_strt == "20696")
Run `rlang::last_trace()` to see the full context.

在网上找了很久,终于解决了,总结一下。

问题解决

主要是因为数据框中的列名有重复,其实报错中也给出了:

! Can’t transform a data frame with duplicate names.

但是,我以为是rownames有重复,其实是colnames有重复,这里检查一下:

names(aa1) %>% duplicated() %>% table


可以看到,有一个有重复。

用make.names处理一下列名,重复的后缀加.1

nn = names(aa1)
names(aa1) = make.names(nn,unique = T)
names(aa1)

在这里插入图片描述
可以看到,图片中的红框部分,Chrom.1名称变了,这样处理后,就不会有重复了。测试一下:


搞定!

总结

tidyverse的数据框,不能有列名重复,否者filter之类的函数都不能使用。解决方案可以用base包中的make.names处理,进行重命名。

猜你喜欢

转载自blog.csdn.net/yijiaobani/article/details/125403059
今日推荐