检查列名是否唯一的函数

Tim*_*man 4 r dataframe

我正在开发一个程序,现在我正在寻找一种在上传文件时检查列名称的方法。如果名称不唯一,则应写入错误。有什么办法可以做到这一点吗?

例如,如果我有这些 df:

> a <- c(10, 20, 30)
> b <- c(1, 2, 3)
> c <- c("Peter", "Ann", "Mike")
> test <- data.frame(a, b, c)
Run Code Online (Sandbox Code Playgroud)

和:

library(dplyr)
test <- rename(test, Number = a)
test <- rename(test, Number = b)
> test
  Number Number     c
1     10      1 Peter
2     20      2   Ann
3     30      3  Mike
Run Code Online (Sandbox Code Playgroud)

如果这是一个文件,我如何检查列名是否唯一。好的结果只能是对或错!

谢谢!

Nel*_*Gon 5

我们可以用:

any(duplicated(names(df))) #tested with df as iris
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

关于OP的数据:

any(duplicated(names(test)))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

可以使用 @sindri_baldur 和 @akrun 建议的以下内容来简化上述内容

anyDuplicated(names(test))
Run Code Online (Sandbox Code Playgroud)

如果您想知道有多少重复:

length(which(duplicated(names(test))==TRUE))
[1] 1
Run Code Online (Sandbox Code Playgroud)

这也可以简化为(按照@sindri_baldur的建议:

sum(duplicated(names(test)))
Run Code Online (Sandbox Code Playgroud)