134

我有一个名为“abcframe”的data.frame

     a  b  c
     1  1  1
     2  2  3

如何查找给定数据框中是否存在列?例如,我想查找data.frame abcframe中是否存在列 d

4

5 回答 5

228

假设您的数据框的名称是dat并且您要检查的列名称是"d",您可以使用%in%运算符:

if("d" %in% colnames(dat))
{
  cat("Yep, it's in there!\n");
}
于 2012-04-23T07:03:57.667 回答
31

您有多种选择,包括使用%in%and grepl

dat <- data.frame(a=1:2, b=2:3, c=4:5)
dat
  a b c
1 1 2 4
2 2 3 5

要获取列的名称:

names(dat)
[1] "a" "b" "c"

用于%in%检查成员资格:

"d" %in% names(dat)
[1] FALSE

Or use `grepl` to check for a match:

grepl("d", names(dat))
[1] FALSE FALSE FALSE
于 2012-04-23T07:09:08.517 回答
10

你可以使用any

> names(dat)
[1] "a" "b" "c"
> any(names(dat) == 'b')
[1] TRUE
> any(names(dat) == 'B')
[1] FALSE
于 2017-12-20T22:56:44.740 回答
5

您还可以使用if(!is.null(abcframe$d))来测试是否d存在于abcframe.

dat <- data.frame(a = 1:2, b = 2:3, c = 4:5)

if (!is.null(dat$d)) {
  print("d exists")
} else {
  print("d does not exist")
}
if (!is.null(dat$a)) {
  print("a exists")
} else {
  print("a does not exist")
}
于 2019-10-29T15:14:58.357 回答
2

对于某些人来说,tidyverse 方法可能更具可读性,因此更容易记住。

您将搜索str_detect返回逻辑向量(如)的变量grepl,然后通过基本 R 函数any将其折叠,如果至少有一个 TRUE 值,则返回 TRUE。

dat %>% names %>% str_detect("d") %>% any()
于 2021-06-28T03:05:29.793 回答