Para descobrir se uma coluna existe no quadro de dados ou não


110

Eu tenho um data.frame com o nome "abcframe"

     a  b  c
     1  1  1
     2  2  3

Como posso saber se uma coluna existe ou não em um determinado quadro de dados? Por exemplo, gostaria de descobrir se existe uma coluna d no abcframe data.frame .


1
Você quer saber se seu quadro de dados tem uma coluna com o nome de d, ou se um determinado vetor dé igual a uma das colunas de seu quadro de dados?

eu quero saber se o dataframe tem um cloumn com o nome d ou não
Sunny Sunny

Desejo a você um bom dia de sol com 100 votos! :-)
TMS

Respostas:


196

Supondo que o nome do seu frame de dados seja date que o nome da coluna a ser verificado seja "d", você pode usar o %in%operador:

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

6
se você está olhando o inverso, ou seja, se a coluna não estiver lá, basta adicionar !no início:if(!"d"%in% colnames(dat))
toto_tico

Resposta incrível. Como posso estender isso se estiver procurando pelas colunas 'd', 'e' e 'f'? Teria que ser: if("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }. Obrigado! - Oh, posso ter encontrado a resposta sozinho: stackoverflow.com/questions/21770912/… .
Sander W. van der Laan

6
all (c ("d", "e", "f")% em% colnames (dat))
skan

24

Você tem várias opções, incluindo usar %in%e 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

Para obter os nomes das colunas:

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

Use %in%para verificar a associação:

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

Or use `grepl` to check for a match:

grepl("d", names(dat))
[1] FALSE FALSE FALSE

11
Para ser greplum pouco mais preciso, você pode usar grepl("^d$",names(dat)), para garantir que uma coluna com nome ddnão retorne TRUE.
BenBarnes

Obrigado por isso, colnamesnão funcionou para mim, mas namesfuncionou.
Docconcoct

@Andrie existe uma maneira de comparar as colunas a dois grandes dataframes para ver quais nomes de coluna estão faltando na outra coluna?
sar

8

Você pode usar any:

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

2

Você também pode usar if(!is.null(abcframe$d))para testar se dexiste em 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")
}

2
Curiosamente, isso falha com a tabela tidyverse, porque o 'dat $ d' lançará um aviso.
miratrix
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.