R语言 查找数据框中是否存在列的步骤

beq87vna  于 2023-09-27  发布在  其他
关注(0)|答案(6)|浏览(174)

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

a  b  c
     1  1  1
     2  2  3

如何查找某列是否存在于给定的数据框中?例如,我想查找数据.frameabcframe中是否存在列d

ig9co6j1

ig9co6j11#

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

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

xqnpmsa82#

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

nc1teljy3#

可以使用any

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

vshtjzan4#

您还可以使用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")
}
oxcyiej7

oxcyiej75#

一个tidyverse方法可能对一些人来说更易读,因此更好地记住。
你可以通过str_detect搜索变量,它返回一个像grepl这样的逻辑向量,然后通过基R函数any折叠它,如果至少有一个TRUE值,它返回TRUE。

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

xv8emn3q6#

如果您想专门检查一列,一种非常规的方法是使用exists

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

exists("a", where = dat) # TRUE
exists("b", where = dat) # TRUE
exists("c", where = dat) # TRUE
exists("d", where = dat) # FALSE

# Does not work with multiple entries though
exists(c("a","b","c","d"), where = dat)

虽然exists主要用于检查环境中的变量,但它也可以用于 Dataframe 和列表,因为它们可以存储命名对象。

相关问题