เพื่อค้นหาว่ามีคอลัมน์อยู่ใน data frame หรือไม่


112

ฉันมี data.frame ชื่อ "abcframe"

     a  b  c
     1  1  1
     2  2  3

ฉันจะทราบได้อย่างไรว่ามีคอลัมน์อยู่หรือไม่อยู่ในกรอบข้อมูลที่กำหนด ตัวอย่างเช่นฉันต้องการค้นหาว่ามีคอลัมน์ dอยู่ใน abcframe data.frameหรือไม่


1
คุณต้องการทราบว่าเฟรมข้อมูลของคุณมีคอลัมน์ที่มีชื่อdหรือไม่หรือคุณต้องการทราบว่าเวกเตอร์ที่ระบุdเท่ากับหนึ่งในคอลัมน์ของเฟรมข้อมูลของคุณหรือไม่

ฉันต้องการทราบว่า dataframe มี cloumn ที่มีชื่อ d หรือไม่
Sunny Sunny

ขอให้คุณซันนี่เดย์มีคะแนนโหวต 100 คะแนน! :-)
TMS

คำตอบ:


199

สมมติว่าชื่อเฟรมข้อมูลของคุณคือ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))
กัน

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


2

คุณยังสามารถใช้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")
}

2
สิ่งที่น่าสนใจนี้ล้มเหลวด้วยการตีเกลียวที่เป็นระเบียบเรียบร้อยเนื่องจาก 'dat $ d' จะส่งคำเตือน
miratrix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.