मेरे पास सैलामैंडर्स की गड़बड़ी से विभिन्न आर्थ्रोपोडों की लंबाई और चौड़ाई के साथ डेटाफ्रेम है। चूंकि कुछ गड़बड़ों में हजारों निश्चित शिकार वस्तुएं थीं, इसलिए मैंने केवल प्रत्येक शिकार प्रकार का एक सबसेट मापा। अब मैं प्रत्येक अनिश्चित व्यक्ति को उस शिकार के लिए औसत लंबाई और चौड़ाई के साथ प्रतिस्थापित करना चाहता हूं। मैं डेटाफ्रेम रखना चाहता हूं और केवल लगाए गए कॉलम (लंबाई 2, चौड़ाई 2) जोड़ना चाहता हूं। मुख्य कारण यह है कि प्रत्येक पंक्ति में सैलामैंडर की तारीख और स्थान पर डेटा के साथ कॉलम भी होते हैं। मैं मापा गया व्यक्तियों के यादृच्छिक चयन के साथ एनए भर सकता हूं लेकिन तर्क के लिए मान लीजिए कि मैं प्रत्येक एनए को माध्य के साथ बदलना चाहता हूं।आर में सबसेट (पीएलआर के साथ बाधा?) द्वारा एसए को प्रतिस्थापित करने के लिए एनए को कैसे बदलें
उदाहरण के लिए कल्पना मैं एक dataframe कि तरह दिखता है:
id taxa length width
101 collembola 2.1 0.9
102 mite 0.9 0.7
103 mite 1.1 0.8
104 collembola NA NA
105 collembola 1.5 0.5
106 mite NA NA
हकीकत में मैं और अधिक कॉलम और के बारे में 25 विभिन्न taxa और कुल में ~ 30,000 शिकार आइटम के कुल की है। ऐसा लगता है कि प्लीयर पैकेज इसके लिए आदर्श हो सकता है लेकिन मैं यह नहीं समझ सकता कि यह कैसे करें। मैं बहुत आर या प्रोग्रामिंग समझदार नहीं हूं लेकिन मैं सीखने की कोशिश कर रहा हूं।
ऐसा नहीं है कि मुझे पता है कि मैं क्या कर रहा हूं लेकिन अगर यह मदद करता है तो मैं खेलने के लिए एक छोटा डेटासेट बनाने की कोशिश करूंगा।
exampleDF <- data.frame(id = seq(1:100), taxa = c(rep("collembola", 50), rep("mite", 25),
rep("ant", 25)), length = c(rnorm(40, 1, 0.5), rep("NA", 10), rnorm(20, 0.8, 0.1), rep("NA",
5), rnorm(20, 2.5, 0.5), rep("NA", 5)), width = c(rnorm(40, 0.5, 0.25), rep("NA", 10),
rnorm(20, 0.3, 0.01), rep("NA", 5), rnorm(20, 1, 0.1), rep("NA", 5)))
यहाँ कुछ चीजें मैं कोशिश की है (कि काम नहीं किया) कर रहे हैं:
# mean imputation to recode NA in length and width with means
(could do random imputation but unnecessary here)
mean.imp <- function(x) {
missing <- is.na(x)
n.missing <-sum(missing)
x.obs <-a[!missing]
imputed <- x
imputed[missing] <- mean(x.obs)
return (imputed)
}
mean.imp(exampleDF[exampleDF$taxa == "collembola", "length"])
n.taxa <- length(unique(exampleDF$taxa))
for(i in 1:n.taxa) {
mean.imp(exampleDF[exampleDF$taxa == unique(exampleDF$taxa[i]), "length"])
} # no way to get back into dataframe in proper places, try plyr?
एक और प्रयास:
imp.mean <- function(x) {
a <- mean(x, na.rm = TRUE)
return (ifelse (is.na(x) == TRUE , a, x))
} # tried but not sure how to use this in ddply
Diet2 <- ddply(exampleDF, .(taxa), transform, length2 = function(x) {
a <- mean(exampleDF$length, na.rm = TRUE)
return (ifelse (is.na(exampleDF$length) == TRUE , a, exampleDF$length))
})
कोई सुझाव
plyr का उपयोग कर या नहीं?
आपको मूल्यों को लागू करने के लिए पैकेज * चूहों * पर विचार करना चाहिए। –
'mi' पैकेज भी काफी अच्छा है। 'अमेलिया' या तो 'चूहों' या 'मील' की तुलना में बहुत तेज़ है, लेकिन यह आपके चर पर निर्भर करता है जो बहुविकल्पीय सामान्य – richiemorrisroe