有没有一种方法可以检查矩阵或数据框中是否存在某列?
例如:TableA
Name Age Address Contact No.
Ben 12 CA 1234567
在处理行之前,我如何检查列“性别”或“年龄”是否存在?
谢谢
有没有一种方法可以检查矩阵或数据框中是否存在某列?
例如:TableA
Name Age Address Contact No.
Ben 12 CA 1234567
在处理行之前,我如何检查列“性别”或“年龄”是否存在?
谢谢
我希望你意识到数据框中的列"Gender"
或"Age"
在所有行中要么存在要么不存在。
一个简单的方法是获取数据框的列名并将你感兴趣的列与列名进行比较,看看它们是否包含在该集合中。例如,根据你的问题提供一些数据:
df <- data.frame(Name = "Ben", Age = 12, Address = "CA", ContactNo = 1234567)
注意数据框架 df
的 names
属性:
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
属性。
colnames(df)
的方法是使用%in%
运算符,这适用于matrix
和data.frame
对象。你也可以使用any(...)
函数来检查它们中的任意一个是否存在。 - thelatemailcolnames
属性,只有一个提取名称的方法。我个人更喜欢在数据框上使用 names
,因为我在列表上也是这样使用的,因此我看到了这两个对象之间的联系,而 colnames()
则认为矩阵和数据框之间存在相似性。各有所好 :-) 对于 any()
给个赞。 - Gavin Simpson?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
?grep
或?grepl
,例如grepl('^ gender $ | ^ age $',colnames(TableA))
,或?'%in%'
。 - jbaums