koşullar sayısını ekleyin 3'e kullanarak "+" ve karşılaştırmak satır bazında bir satırda buluştu:
subset(df, ((A <= A[1]) + (B <= B[1]) + (C <= C[1]) + (D <= D[1])) >= 3)
> subset(df, ((A <= A[1]) + (B <= B[1]) + (C <= C[1]) + (D <= D[1])) >= 3)
Name A B C D
1 r1 2 2 2 2
3 r3 1 1 1 2
sonra sadece eklemek de 'r1' kaldırmak istiyorsanız [-1, ]
Bu, bir yüzde kriterine karşı test edilebilen sayısal bir vektör sağlamak için genelleştirilebilir; Her satırdaki ilk satırdaki muadillerinden daha az olan öğe sayısını verir. Aşağıda
rowSums(sweep(df[-1], 2, unlist(df[1,-1]), "<="))
[1] 4 2 4 2
bir tanıtımdır: tek bir satır dataframe başarısız olarak ben üçüncü argümanı kullanarak çünkü ilk satırı
unlist
için gerekli
Bir
apply
çözüm muhtemelen görünüyordu olurdu aklıma geldi
df2 <- cbind(nms = paste0("r", 1:10),
as.data.frame(matrix(sample(1:10, 200,repl=TRUE), 10)))
df2
#--------------
nms V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20
1 r1 8 6 10 7 3 7 2 8 4 9 9 4 5 4 8 7 2 1 6 4
2 r2 3 9 6 3 9 10 6 10 10 3 3 2 4 4 4 10 3 5 2 1
3 r3 1 7 6 8 3 5 2 3 1 5 5 4 8 3 1 6 2 10 3 7
4 r4 2 6 10 10 8 7 9 1 4 5 6 7 2 6 8 3 5 10 10 3
5 r5 5 5 7 2 5 10 2 9 2 9 4 6 1 5 8 5 8 6 3 5
6 r6 4 1 7 7 6 9 6 3 4 3 2 9 4 8 10 3 4 4 10 4
7 r7 7 1 10 4 1 2 8 5 8 8 5 5 5 6 4 10 6 9 10 6
8 r8 10 8 1 4 1 4 10 3 1 3 10 3 4 9 4 7 4 9 2 2
9 r9 3 10 9 1 10 8 8 4 7 2 7 2 9 10 3 3 7 4 10 1
10 r10 4 7 3 3 1 9 4 1 9 5 3 9 9 3 9 2 9 10 2 4
#-----------------
rowSums(sweep(df2[-1], 2, unlist(df2[1,-1]), "<="))
# [1] 20 11 15 12 12 11 11 13 10 11
rowSums(sweep(df2[-1], 2, unlist(df2[1,-1]), "<=")) >= 20*0.75
# [1] TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
df2[ rowSums(sweep(df2[-1], 2, unlist(df2[1,-1]), "<=")) >= 20*0.75 , ]
#---------
nms V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20
1 r1 8 6 10 7 3 7 2 8 4 9 9 4 5 4 8 7 2 1 6 4
3 r3 1 7 6 8 3 5 2 3 1 5 5 4 8 3 1 6 2 10 3 7
colSums(apply(df2[-1], 1, "<=", df2[1,-1])) >= ncol(df2)*.7
Not `bir matris döner uygulamak biçimi nedeniyle colSums kullanmaya gerek: bazı R programcılar için daha açık Sütun odaklı moda, bazen başlayanlar için bir bulmaca.
Varsayım: veri kümesi olarak, Name
saklayan birinci sütun dışındaki her bir sütun karşılaştırarak
Sadece r1 temelinde karşılaştırma yapmamız gerekiyor mu? –
@KunalPuri Sorunuz için teşekkür ederiz. Evet, şimdilik bu sadece benim "r1" temelinde bir karşılaştırma yapmak niyetim. – Dre
Ayrıca, soru başlangıcında, sadece en az% 50'ye sahip olan satırları döndürdüğünüzde, ve sorudan aşağıya inerken, satır r1 için, sadece r3 ve r2 ve r4 değil % 50 koşulu karşılarlar. Bu şeyi açıklığa kavuşturur musun? –