मैंने एक लूप के लिए बनाया है जो विलंबता (समय) लेता है और देखे गए कुल स्कोर को आउटपुट करता है। (यानी: विलंबता = 1000, # देखे गए स्कोर = "एक")। मैं लूप के परिणामों को अपने वर्तमान डेटा फ्रेम में, एक नए कॉलम में रखना चाहता हूं। तो, उदाहरण के लिए, "एक", "दो, "एक" आदि के साथ एक कॉलम होगा। क्या कोई मेरी मदद कर सकता है?

मैंने अब तक यही कोशिश की है:

मैंने लूप के लिए इससे एक वेक्टर बनाने की कोशिश की। मैंने अन्य प्रश्नों पर पढ़ा कि आर पर वैक्टर के साथ काम करना बेहतर है।

सबसे पहले, मैंने इसे "स्कोर" नामक फ़ंक्शन में लूप के लिए बदल दिया:

score <- function(i){
  if(i<1000){
    print("one")
  }else if(i<2000){
    print("two")
  } else if (i < 3000){
    print("three")
  } else if (i < 4000){
    print("four")
  }else if (i < 5000){
    print("five")
  }else if(i < 6000){
    print ("six ")
  }else if(i<7000){
    print("seven")
  }else {
    print("other")
  }
}

मैंने तब lapply फ़ंक्शन का उपयोग score फ़ंक्शन को मेरे DDM डेटाफ़्रेम पर लागू करने के लिए किया, विशेष रूप से मेरे Latency कॉलम में। मैंने इसे lapply को Lat नामक वेक्टर को सौंपा है:

Lat <- lapply(DDM$latency, score)
Lat

यह फ़ंक्शन के लिए आउटपुट है, मैंने केवल कुछ लाइन बीसी को बहुत लंबा शामिल किया है:

[[1]]
[1] "three"

[[2]]
[1] "one"

[[3]]
[1] "two"

[[4]]
[1] "one"

[[5]]
[1] "one"

[[6]]
[1] "one"

[[7]]
[1] "one"

[[8]]
[1] "one"

[[9]]
[1] "one"

[[10]]
[1] "one"

[[11]]
[1] "one"

फिर मैंने इस वेक्टर को अपने डेटा फ्रेम में एक कॉलम के रूप में जोड़ा।

DDM$Newlat<- c(Lat)

लेकिन समस्या यह है कि जब मैं अपना डेटाफ्रेम, "डीडीएम" चलाता हूं, और हर पंक्ति में नए कॉलम को देखता हूं "" दिखाता है। मुझे लगता है कि ऐसा इसलिए हो सकता है क्योंकि लूप के लिए मेरे आउटपुट वर्ण हैं।

यह मेरे नए कॉलम का आउटपुट है, Newlat अगर मैं अपना डेटाफ्रेम चलाता हूं:

<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>
<chr [1]>

मैंने जो कोशिश की है उसे देखकर, क्या मेरे वर्तमान कोड को ठीक करने का कोई बेहतर तरीका या तरीका है ताकि मेरे वांछित आउटपुट के साथ एक नया कॉलम हो।

आपकी सहायता के लिए अग्रिम रूप से धन्यवाद!!

r
0
Kim_unistudent 9 अगस्त 2020, 04:20

1 उत्तर

सबसे बढ़िया उत्तर
  • print केवल मानों को प्रिंट करता है, यह return नहीं करता है। यदि आप इसे सहेजना चाहते हैं तो return का प्रयोग करें।
  • आपको lapply का उपयोग करके प्रत्येक मान के लिए एक-एक करके ऐसा नहीं करना चाहिए। इसे प्राप्त करने के लिए वेक्टरकृत तरीके हैं। आप पूरे वेक्टर (DDM$latency) को पास करने के लिए यहां ifelse का उपयोग कर सकते हैं। नेस्टेड ifelse का सरलीकृत संस्करण dplyr::case_when है।
  • आपको इसके बजाय वास्तव में cut/findInterval का उपयोग करना चाहिए। कुछ इस तरह :
DDM$Newlat <- cut(DDM$latency, c(seq(0, 700, 100), Inf), 
    labels = c('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'other'))
1
Ronak Shah 9 अगस्त 2020, 04:28