मेरे पास काफी बड़ा डेटासेट है, और मुझे कई कॉलम से प्रत्येक पंक्ति का अधिकतम मान निर्धारित करने की आवश्यकता है। तो नीचे दिए गए नमूना डेटा में, "II" के लिए उच्चतम मान क्या है, और यदि उच्चतम मान "N" या "P" में है। मुझे पता है कि इसके समान प्रश्न पहले पोस्ट किए गए हैं, हालांकि मुझे अपने डेटासेट में अन्य मेटाडेटा कॉलम को हटाने के लिए आउटपुट की आवश्यकता नहीं है। इसका मतलब यह भी है कि मुझे कॉलम की श्रेणी निर्दिष्ट करने की आवश्यकता है जिसे "अधिकतम" क्वेरी में शामिल किया जाना चाहिए। इसके साथ किसी भी मार्गदर्शन के लिए अग्रिम धन्यवाद।

data<-data_frame(Exp = c("I", "II", "III", "IV", "V", "VI", "VII", "VIII"),
                  N = c(8.77, 1.67, 7.47, 7.58, 1.1, 8.9, 7.5, 7.7),
                  P = c(1.848, 3.029, 1.925, 2.725, 1.900, 3.100, 
                                    2.000, 9.800))

मैंने नीचे दिए गए कोड के कई रूपों की कोशिश की है:

test %>% 
  mutate(Max = pmax(!!! rlang::syms(names(.)[c("N", "P"),]))) %>% 
  group_by(data, Exp) %>% 
  summarise(Max = max(Max))

और त्रुटि प्राप्त करें: UseMethod ("mutate_") में त्रुटि: वर्ग "फ़ंक्शन" के ऑब्जेक्ट पर लागू 'mutate_' के लिए कोई लागू विधि नहीं है

यह मेरा पहला प्रश्न यहाँ पर पूछा गया है, इसलिए किसी भी गलत स्वरूपण आदि के लिए क्षमा चाहते हैं, इस पर कोई सलाह (और मेरा प्रश्न) बहुत सराहना की जाएगी।

1
GenieV 26 मार्च 2020, 16:38

1 उत्तर

सबसे बढ़िया उत्तर

मैं इस पर दो चरणों में विचार कर रहा हूं

  1. स्तंभों का अधिकतम मान ज्ञात करें
  2. अधिकतम मान से मेल खाने वाला लेबल ढूंढें (मान लें कि समान मान नहीं हैं)

यदि आपके पास केवल दो कॉलम N और P हैं तो case_when का उपयोग करना आसान है।

data2 = data %>%
  mutate(max_val = pmax(N,P)) %>%                  # find max
  mutate(source = case_when(max_val == N ~ "N",    # find label
                            max_val == P ~ "P"))

हालाँकि, यदि स्तंभों की संख्या, या स्तंभ के नाम, गतिशील हैं तो यह कठिन हो जाता है। मेरे पास निम्नलिखित कार्य है:

cols = c("N", "P")    # list of column names to work with

data2 = data %>%
  mutate(max_val = pmax(!!!syms(cols))) %>%   # find max
  mutate(source = NA)                         # initialize blank labels

# iterate to find labels
data3 = data2
for(c in cols)
  data3 = mutate(data3, source = ifelse(is.na(source) & max_val == !!sym(c), c, source))

संभवत: sym को case_when के साथ संयोजित करने का एक तरीका है, ताकि आपको लेबल पर पुनरावृति न करनी पड़े। अगर कोई इसे पाता है, तो कृपया इस उत्तर में एक अपडेट पोस्ट करें।

0
Simon.S.A. 26 मार्च 2020, 22:00