【问题标题】:How to check if a two data frame have the same column names?如何检查两个数据框是否具有相同的列名?
【发布时间】:2014-10-25 19:16:25
【问题描述】:

我有两个这样的数据框:

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 循环语句带有警告或停止功能检查它们是否具有相同的列名? 还是有别的..?我更喜欢前者。

【问题讨论】:

  • 我想你想要names(myquest1) %in% names(myquest2),结果你的例子显示没有一样
  • @RichardScriven 查看我的编辑。我放弃了一部分。
  • @Trik23 你想检查两个数据集中的所有列是否相同吗?假设names(myquest2) &lt;- c("quest1", "quest2"); names(myquest2) %in% names(myquest1)#[1] TRUE TRUE
  • @akrun 是的,所有这些。就像一个比较。如果不是,请停止/警告。
  • @Trik23 为什么不试试identical(sort(names(myquest1)), sort(names(myquest2)))

标签: r


【解决方案1】:

我认为您需要的是使用函数的以下内容。

使用您的示例:

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"

【讨论】:

  • cmets 里的用户帮了我一把。但是我会接受你的 anwser,因为他们还没有在这里给出一个。你给初学者一个有趣的方法。谢谢!
  • 如果你将 my_func 编程为也保留一个计数器,打印每个失败的 col 名称并在完成后中断,如果不同的计数器大于 1,那么你会得到一个很好的名称列表来追踪下来修复!很棒的功能!
猜你喜欢
  • 2018-09-03
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多