데이터 프레임에 열이 있는지 확인하려면


110

"abcframe"이라는 이름의 data.frame이 있습니다.

     a  b  c
     1  1  1
     2  2  3

주어진 데이터 프레임에 열이 있는지 여부를 어떻게 알 수 있습니까? 예를 들어, d 열data.frame abcframe 에 있는지 확인하고 싶습니다 .


1
데이터 프레임에 이름이 인 열 d이 있는지 알고 싶 d습니까? 아니면 주어진 벡터가 데이터 프레임의 열 중 하나와 같은지 알고 싶 습니까?

나는 dataframe 이름 d 또는하지와 cloumn이 있는지 여부를 knnow 할
써니 써니

100 표로 좋은 화창한 날을 기원합니다! :-)
TMS

답변:


196

데이터 프레임의 이름이 dat이고 확인할 열 이름 이라고 가정하면 연산자를 "d"사용할 수 있습니다 %in%.

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

6
당신이 역을 찾고 있다면 열이없는 경우, 즉, 그냥 추가 !시작 부분에 :if(!"d"%in% colnames(dat))
toto_tico

멋진 대답입니다. 'd', 'e', ​​'f'열을 찾으려면 어떻게 확장합니까? 그럴까요 : if("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }. 감사! -오, 제가 직접 답을 찾았을 수도 있습니다 : stackoverflow.com/questions/21770912/… .
Sander W. van der Laan

6
모든 (c ( "D", "E", "F")의 % % COLNAMES (DAT))
SKAN

24

%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

11
grepl좀 더 정확한 정보 를 얻으려면 ,를 사용 grepl("^d$",names(dat))하여 이름 dd이 있는 열 이를 반환하지 않도록 할 수 있습니다 TRUE.
BenBarnes

이 주셔서 감사합니다, colnames나를 위해 작동하지 않았지만 names않았다.
Docconcoct

@Andrie 열을 두 개의 큰 데이터 프레임과 비교하여 다른 열에서 누락 된 열 이름을 확인하는 방법이 있습니까?
sar

8

다음을 사용할 수 있습니다 any.

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

2

에 존재 if(!is.null(abcframe$d))하는지 여부를 테스트 하는 데 사용할 수도 있습니다 .dabcframe

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
흥미롭게도 tidyverse tibble에서는 실패합니다. 'dat $ d'가 경고를 던지기 때문입니다.
miratrix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.