हाय मैं आर के लिए बिल्कुल नया हूं और इस पर किसी भी मदद की सराहना करता हूं।
मैंने इसी तरह के प्रश्नों की खोज की है लेकिन दुर्भाग्य से मैं दिए गए समाधानों को वास्तव में समझ नहीं पा रहा हूं।
मेरी समस्या:
मेरे पास बार-बार परीक्षण डेटा से भरी लगभग 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)
#########
सूचियों की सूची के प्रत्येक तत्व पर फ़ंक्शन करने का सबसे अच्छा तरीका क्या है जो उन सभी सूची घटकों में एक चर जोड़ता है?
मुझे संदेह है कि इसका समाधान सरल होगा?
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
में करना एक रास्ता है, लेकिन आपको यह देखना चाहिए कि आपके अन्य कई उद्देश्यों के लिए क्या बेहतर है
data.frame
विभिन्न लंबाई के चर के साथ काम कर सकता है (tidyr
के लंबे प्रारूप की जांच करें)। अन्यथा,lists
का प्रयोग करते रहें। अगर उत्तर काम करता है, तो इसे स्वीकार करने पर विचार करें।