查找数据框中是否存在列

我有一个名为“ abc 帧”的数据

     a  b  c
1  1  1
2  2  3

如何查找给定数据框中是否存在列? 例如,我希望查找 data.frame 画面中是否存在 D 栏

119794 次浏览

假设数据帧的名称为 dat,要检查的列名称为 "d",那么可以使用 %in%操作符:

if("d" %in% colnames(dat))
{
cat("Yep, it's in there!\n");
}

您有许多选项,包括使用 %in%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

你可以使用 any:

> names(dat)
[1] "a" "b" "c"
> any(names(dat) == 'b')
[1] TRUE
> any(names(dat) == 'B')
[1] FALSE

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

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")
}

一个整体的方法可能对某些人来说更易读,因此更容易记住。

您可以通过 str_detect搜索变量,它返回一个类似于 grepl的逻辑向量,然后通过基 R 函数 any折叠该变量,如果至少有一个 TRUE 值,则返回 TRUE。

dat %>% names %>% str_detect("d") %>% any()