如何检查两个数据框是否具有相同的列名?

8

我有两个像这样的数据框:

quest1 <- c(5,5,5)
quest2 <- c(5,5,5)
quest3<- c("a","b","c")
quest4 <- c(7,7,7)
quest5 <- c(8,8,8)


myquest1 <- data.frame(quest1,quest2,quest3)

myquest2 <- data.frame(quest4,quest5)

我该如何使用ifelse或if循环语句并带有警告或停止功能来检查它们是否具有相同的列名?或者还有其他方法吗?我更喜欢前一种方法。

2
我认为你想要使用 names(myquest1) %in% names(myquest2),结果显示你的示例中没有相同的名称。 - Rich Scriven
1
@Trik23 你想检查两个数据集中所有列是否相同吗?假设 names(myquest2) <- c("quest1", "quest2"); names(myquest2) %in% names(myquest1) #[1] TRUE TRUE - akrun
6
为什么不尝试使用 identical(sort(names(myquest1)), sort(names(myquest2)))?(建议) - akrun
@RichardScriven 感谢您提供的解决方案! - user4110499
@Trik23 没问题,很高兴能帮到你。 - akrun
显示剩余5条评论
1个回答

7
我认为你需要像以下这样使用函数来实现。使用你的例子:
quest1 <- c(5,5,5)
quest2 <- c(5,5,5)
quest3<- c("a","b","c")
quest4 <- c(7,7,7)
quest5 <- c(8,8,8)

myquest1 <- data.frame(quest1,quest2,quest3)
myquest2 <- data.frame(quest4,quest5)
myquest3 <- data.frame(quest1,quest2,quest3)


my_func <- function(x,y) {
    for (i in names(x)) {
      if (!(i %in% names(y))) {
          print('Warning: Names are not the same')
          break
      }  
      else if(i==tail(names(y),n=1)) {
          print('Names are identical')
      }
    }
}


> my_func(myquest1,myquest2)
[1] "Warning: Names are not the same"
> my_func(myquest1,myquest3)
[1] "Names are identical"

评论区的用户帮了我很多。但是我会接受你的回答,因为他们还没有在这里给出一个。你给了一个有趣的初学者方法。谢谢! - user4110499
如果你编写my_func函数时也加入一个计数器,并在完成后打印每个失败的列名并中断,如果不同的计数器大于一,则可以得到一个很好的名字列表来追踪和修复!这是一个很棒的函数! - sconfluentus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接