如何检查矩阵或数据框中是否存在某一列?

3

有没有一种方法可以检查矩阵或数据框中是否存在某列?

例如:TableA

Name    Age    Address     Contact No.
Ben     12     CA           1234567

在处理行之前,我如何检查列“性别”或“年龄”是否存在?

谢谢


请查看?grep?grepl,例如grepl('^ gender $ | ^ age $',colnames(TableA)),或?'%in%' - jbaums
哦,你的“性别”列在哪里? - buruzaemon
1
@buruzaemon - 它不存在 - 我猜这就是问题的关键。 - thelatemail
感谢您的评论。 :) - Ianthe
1个回答

7

我希望你意识到数据框中的列"Gender""Age"在所有行中要么存在要么不存在

一个简单的方法是获取数据框的列名并将你感兴趣的列与列名进行比较,看看它们是否包含在该集合中。例如,根据你的问题提供一些数据:

df <- data.frame(Name = "Ben", Age = 12, Address = "CA", ContactNo = 1234567)

注意数据框架 dfnames 属性:

names(df)

> names(df)
[1] "Name"      "Age"       "Address"   "ContactNo"

接下来,您可以检查感兴趣的变量是否在数据框的变量集中:

c("Gender", "Age") %in% names(df)

> c("Gender", "Age") %in% names(df)
[1] FALSE  TRUE

对于矩阵,您需要使用colnames()提取函数来访问colnames属性,而不是使用names()names属性。


2
在编程中,查找colnames(df)的方法是使用%in%运算符,这适用于matrixdata.frame对象。你也可以使用any(...)函数来检查它们中的任意一个是否存在。 - thelatemail
感谢Gavin和thelatemail的回答和评论。省去了我大量的研究时间。我真的很新手R。^_^ - Ianthe
@thelatemail 说得好,但数据框没有 colnames 属性,只有一个提取名称的方法。我个人更喜欢在数据框上使用 names,因为我在列表上也是这样使用的,因此我看到了这两个对象之间的联系,而 colnames() 则认为矩阵和数据框之间存在相似性。各有所好 :-) 对于 any() 给个赞。 - Gavin Simpson
@ReinstateMonica-G.Simpson Monica - G. Simpson,有没有办法比较两个数据框的列名,以查看另一个数据框中缺少哪些列? - sar
1
@ sar 尝试使用 ?setdiff?intersect,例如:setdiff( names(data.frame(A = 1:3, B = 1:3, C = 1:3)), names(data.frame(A = 1:3, C = 1:3)) )intersect( names(data.frame(A = 1:3, B = 1:3, C = 1:3)), names(data.frame(A = 1:3, C = 1:3)) ),在 dplyr 包中也有相同功能的版本。 - Gavin Simpson

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