मैं दो (या अधिक) कॉलम से मानों के आधार पर डेटा फ्रेम से पंक्तियां निकालना चाहता हूं, जहां कॉलम में समान वर्ण स्ट्रिंग होते हैं। उदाहरण के लिए, नीचे दिए गए डेटा फ़्रेम में, मैं "जाम" और "मछली" वाली सभी पंक्तियों को निकालना चाहूंगा।

यह करीब की तरह है, लेकिन यह इस पर केंद्रित है 2 या अधिक स्तंभों पर स्तंभों का चयन करने के बजाय एकल स्तंभ।

df <- structure(list(num = 1:4, 
                     term_1 = c("jam", "bananna", "fish", 
                                           "carrot"), 
                     term_2 = c("fish", "jam", "apple", "halva"), 
                     term_3 = c("halva", "fish", "carrot", "fish")), 
                row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"))

df

#>   num  term_1 term_2 term_3
#> 1   1     jam   fish  halva
#> 2   2 bananna    jam   fish
#> 3   3    fish  apple carrot
#> 4   4  carrot  halva   fish

मैंने सोचा कि ऐसा कुछ काम कर सकता है, लेकिन यह वह नहीं करता जो मैं ढूंढ रहा हूं।

df %>% 
  filter(term_1 == c("jam", "fish") | term_2 == c("jam", "fish") | 
           term_3 == c("jam", "fish"))

मैंने कुछ अन्य फ़िल्टर () वेरिएंट भी आज़माए हैं - if_all () के साथ - और str_select फ़िल्टर () के साथ, लेकिन मुझे कुछ विवरण याद आ रहा है। किसी भी दिशा की सराहना की जाएगी।

2021-07-12 को reprex पैकेज द्वारा बनाया गया (v2.0.0)

2021-07-12 को reprex पैकेज द्वारा बनाया गया (v2.0.0)

1
avgoustisw 13 जुलाई 2021, 02:19

2 जवाब

आप पंक्तिसम का भी उपयोग कर सकते हैं:

df%>%filter(rowSums(across(-num, ~.%in% c("fish", 'jam')))>=2)

# A tibble: 2 x 4
    num term_1  term_2 term_3
  <int> <chr>   <chr>  <chr> 
1     1 jam     fish   halva 
2     2 bananna jam    fish  
1
GuedesBF 12 जुलाई 2021, 23:56

आप rowSums का उपयोग इस प्रकार कर सकते हैं -

df[rowSums(df[-1] == 'fish') > 0 & rowSums(df[-1] == 'jam') > 0, ]

#   num term_1  term_2 term_3
#  <int> <chr>   <chr>  <chr> 
#1     1 jam     fish   halva 
#2     2 bananna jam    fish  
1
Ronak Shah 13 जुलाई 2021, 06:48