ใน matlab มีวิธีค้นหาค่าในเวกเตอร์หนึ่ง แต่ไม่พบในอีกเวกเตอร์
ตัวอย่างเช่น:
x <- c(1,2,3,4)
y <- c(2,3,4)
มีฟังก์ชั่นใดบ้างที่บอกฉันว่าค่าที่อยู่ในx
นั้นไม่ได้y
เป็น 1?
ใน matlab มีวิธีค้นหาค่าในเวกเตอร์หนึ่ง แต่ไม่พบในอีกเวกเตอร์
ตัวอย่างเช่น:
x <- c(1,2,3,4)
y <- c(2,3,4)
มีฟังก์ชั่นใดบ้างที่บอกฉันว่าค่าที่อยู่ในx
นั้นไม่ได้y
เป็น 1?
คำตอบ:
ใช่. สำหรับเวกเตอร์คุณสามารถใช้ตัว%in%
ดำเนินการหรือis.element()
ฟังก์ชัน
> x[!(x %in% y)]
1
สำหรับเมทริกซ์มีหลายวิธีที่แตกต่างกัน merge()
น่าจะตรงไปตรงมาที่สุด ฉันขอแนะนำให้ดูคำถามนี้สำหรับสถานการณ์นั้น
ไฟล์วิธีใช้ใน R สำหรับsetdiff, union, intersect, setequal และ is.elementให้ข้อมูลเกี่ยวกับฟังก์ชันชุดมาตรฐานใน R
setdiff(x, y)
ผลตอบแทนที่องค์ประกอบของที่ไม่อยู่ในx
y
ดังที่ระบุไว้ข้างต้นมันเป็นความแตกต่างที่ไม่สมมาตร ตัวอย่างเช่น:
> x <- c(1,2,3,4)
> y <- c(2,3,4,5)
>
> setdiff(x, y)
[1] 1
> setdiff(y, x)
[1] 5
> union(setdiff(x, y), setdiff(y, x))
[1] 1 5
x[is.na(match(x,y))]
setdiff()
เป็นฟังก์ชันที่ยุ่งยากเนื่องจากเอาต์พุตขึ้นอยู่กับลำดับของอินพุต intersect
คุณแทนสามารถเขียนฟังก์ชั่นที่เรียบง่ายเช่นที่ไม่ตรงข้ามแน่นอนของ ไกลกว่านี้ดีกว่า
>difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
#Now lets test it.
>x <- c(1,2,3,4)
>y <- c(2,3,4,5)
>difference(x,y)
[1] 1 5
ถ้า:
x <- c(1,2,3,4)
y <- c(2,3,4)
นิพจน์ใด ๆ เหล่านี้:
setdiff(x, y)
x[!(x %in% y)]
x[is.na(match(x,y))]
x[!(is.element(x,y))]
จะให้คำตอบที่เหมาะสม[1] 1
ถ้าเป้าหมายคือการหาค่า / ตัวละครในที่ไม่ได้อยู่ในปัจจุบันx
y
อย่างไรก็ตามการใช้นิพจน์ข้างต้นอาจเป็นเรื่องยุ่งยากและสามารถให้ผลลัพธ์ที่ไม่ต้องการได้ขึ้นอยู่กับลักษณะของเวกเตอร์และตำแหน่งของ x และ y ในนิพจน์ ตัวอย่างเช่นหาก:
x <- c(1,1,2,2,3,4)
y <- c(2,3,4)
และเป้าหมายคือเพื่อค้นหาค่า / อักขระเฉพาะx
ที่ไม่มีอยู่ในy
หรือกลับกัน การใช้นิพจน์เหล่านี้จะยังคงให้คำตอบที่ถูกต้อง[1] 1
:
union(setdiff(x, y), setdiff(y, x))
ขอบคุณข้อมูลของJeromy Anglim
หรือ:
difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)
ขอบคุณข้อมูลจากWorkhouse
setdiff(x,y)
และsetdiff(y,x)
ไม่เหมือนกัน