हाय मैं आर के लिए बिल्कुल नया हूं और इस पर किसी भी मदद की सराहना करता हूं।

मैंने इसी तरह के प्रश्नों की खोज की है लेकिन दुर्भाग्य से मैं दिए गए समाधानों को वास्तव में समझ नहीं पा रहा हूं।

मेरी समस्या:

मेरे पास बार-बार परीक्षण डेटा से भरी लगभग 60 एक्सेल शीट हैं जिनका मैं विश्लेषण और तुलना करना चाहता हूं। इन सभी की एक समान संरचना और चर/स्तंभ नाम हैं लेकिन प्रत्येक के लिए डेटा बिंदुओं की संख्या भिन्न है। मैंने इन्हें सूचियों की सूची के रूप में R में लोड किया है और सूचियों की सूची के अंदर होने के बाद मैं प्रत्येक मूल डेटा सेट पर जोड़तोड़ की एक श्रृंखला करना चाहता हूं। ये जोड़तोड़ समान चर नामों आदि का उपयोग करते हुए समान होंगे लेकिन विभिन्न डेटा सेटों पर लागू होंगे।

एक उदाहरण के रूप में कहें कि मैं डेटा के आधार पर कुछ गणना करना चाहता था और फिर परिणामों को नेस्टेड सूची के अंदर एक नए चर के रूप में जोड़ना चाहता था।

मेरी स्थिति का एक सरलीकृत संस्करण कुछ इस तरह होगा।

###set up###

specimen1=list("Stress"=50:100,
"Strain"=5:55) #represents my excel sheet imports
specimen2=list("Stress"=65:115,
"Strain"=6.5:56.5) #simplifed for brevity

specimen3=list("Stress"=42:92,"Strain"=4.2:54.2)

rate1=list(specimen1,specimen2,specimen3) #my list of lists

names(rate1)<-c("specimen 1","specimen 2","specimen 3") #set the names
####performing calculation and adding to the list entry###

#now i want to perform a calculation on each specimen and then add the result to that specimen
#I suspect the solution lies with the lapply family something like this?

example_function<-function(Stress,Strain){

E=Stress/Strain #performs calculation
#but doesn't add the result to the list?

rate1$specimen$E=E #something like this to add to the original data set?
#but I don't understand how to change the indexing with out using a for loop

}


lapply(rate1,example_function)

#########

सूचियों की सूची के प्रत्येक तत्व पर फ़ंक्शन करने का सबसे अच्छा तरीका क्या है जो उन सभी सूची घटकों में एक चर जोड़ता है?

मुझे संदेह है कि इसका समाधान सरल होगा?

0
woodbutcher 12 फरवरी 2021, 02:02

1 उत्तर

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

यदि आप इसे lists में करने के लिए बाध्य नहीं हैं, तो आप अपनी सभी सूचियों को बाँध सकते हैं और परिणामी data.frame प्रारूप में dplyr का उपयोग कर सकते हैं।

library(dplyr)
bind_rows(rate1, .id="specimen") %>% 
 mutate(E = Stress/Strain)

जो पैदा करता है

# A tibble: 153 x 4
   specimen   Stress Strain     E
   <chr>       <int>  <dbl> <dbl>
 1 specimen 1     50      5 10   
 2 specimen 1     51      6  8.5 
 3 specimen 1     52      7  7.43
 4 specimen 1     53      8  6.62
...

data.frames का उपयोग करना आमतौर पर R में काम करने का सबसे सीधा तरीका है।

यदि आप lists का उपयोग जारी रखना चाहते हैं, क्योंकि आपको एक नया कॉलम बनाना है, तो संभवतः lapply के बजाय for लूप का उपयोग करना बेहतर होगा। इस प्रकार आप लूप का उपयोग करके अपने विशेष मुद्दे को हल करते हैं।

# this will add the column E to each element of the list rate1
for(i in 1:length(rate1)) {
  rate1[[i]]$E <- rate1[[i]]$Stress/rate1[[i]]$Strain  
}

यह lapply वाला संस्करण है, आप function(li) के list कॉल के अंदर कॉलम जोड़ना जारी रख सकते हैं।

modified_rate1 <- 
lapply(rate1, function(li) 
  list(
    Stress = li$Stress,
    Strain = li$Strain,
    E = li$Stress/li$Strain
  )
)

मुझे लगता है कि इसे data.frame में करना एक रास्ता है, लेकिन आपको यह देखना चाहिए कि आपके अन्य कई उद्देश्यों के लिए क्या बेहतर है

0
Matias Andina 12 फरवरी 2021, 02:23
आपके स्पष्ट और त्वरित उत्तर के लिए बहुत-बहुत धन्यवाद। वे तीनों विकल्प काम करने लगते हैं। मैं फिर से डेटा फ्रेम का उपयोग कर देखूंगा। मैंने उनके साथ शुरुआत की थी, लेकिन समस्याएँ थीं जब मेरे कुछ अन्य कोड को एक खाली डेटा को निष्क्रिय करने की आवश्यकता थी। गतिशील कॉलम लंबाई के साथ तालिका।
 – 
woodbutcher
12 फरवरी 2021, 03:11
आपकी डेटा संरचना के आधार पर, एक data.frame विभिन्न लंबाई के चर के साथ काम कर सकता है (tidyr के लंबे प्रारूप की जांच करें)। अन्यथा, lists का प्रयोग करते रहें। अगर उत्तर काम करता है, तो इसे स्वीकार करने पर विचार करें।
 – 
Matias Andina
13 फरवरी 2021, 01:07
साथ ही, अगर उत्तर उपयोगी था, तो इसे स्वीकार करने पर विचार करें
 – 
Matias Andina
24 फरवरी 2021, 16:08