यह प्रश्न group weighted means पर एक और का अनुसरण करता है: मैं data.table
का उपयोग करके भारित औसत-समूह औसत बनाना चाहता हूं। प्रारंभिक प्रश्न के साथ अंतर यह है कि चर के वेरिएबल के नाम स्ट्रिंग वेक्टर में निर्दिष्ट हैं।समूहों द्वारा (डेटाटेबल में) कई स्तंभों के लिए भारित साधन
डेटा:
df <- read.table(text= "
region state county weights y1980 y1990 y2000
1 1 1 10 100 200 50
1 1 2 5 50 100 200
1 1 3 120 1000 500 250
1 1 4 2 25 100 400
1 1 4 15 125 150 200
2 2 1 1 10 50 150
2 2 2 10 10 10 200
2 2 2 40 40 100 30
2 2 3 20 100 100 10
", header=TRUE, na.strings=NA)
ऊपर उल्लिखित सवाल से रोलाण्ड के सुझाव उत्तर का उपयोग करना:
library(data.table)
dt <- as.data.table(df)
dt2 <- dt[,lapply(.SD,weighted.mean,w=weights),by=list(region,state,county)]
मैं तार के साथ एक वेक्टर गतिशील स्तंभों जिसके लिए मैं अंदर-समूह भारित औसत चाहते हैं निर्धारित करने के लिए किया है।
colsToKeep = c("y1980","y1990")
लेकिन मुझे नहीं पता कि डेटाटेबल जादू के लिए इसे तर्क के रूप में कैसे पास किया जाए।
मैं
dt[,lapply(
as.list(colsToKeep),weighted.mean,w=weights),
by=list(region,state,county)]`
कोशिश की, लेकिन मैं तो मिलती है:
Error in x * w : non-numeric argument to binary operator
सुनिश्चित नहीं हैं कि प्राप्त करने के लिए मैं क्या चाहते हैं।
बोनस प्रश्न: मैं V1 और V2 प्राप्त करने के बजाय मूल कॉलम नाम रखना चाहता हूं।
एनबी मैं डेटा.table पैकेज के संस्करण 1.9.3 का उपयोग करता हूं।
बग अभी भी मौजूद है या है पहला दृष्टिकोण अब अनुशंसित नहीं है? 16 दिसंबर 2015 को, मुझे यह मिलता है: 'त्रुटि में त्रुटि। डबल (डब्ल्यू): प्रकार 'डबल'' – PatrickT
प्रकार के वेक्टर को 'बंद' प्रकार को कॉरर्स नहीं कर सकता है, क्षमा करें :-(। आप कर सकता था: 'डीटी [, लापरवाही (भूलभुलैया (colsToKeep), weighted.mean, w = भार), =। (क्षेत्र, राज्य, देश)]। आपकी त्रुटि यह इंगित करती है कि आप 'as.double' का उपयोग कर रहे हैं इनपुट के रूप में एक फ़ंक्शन के साथ (जो असंबंधित है)। – Arun
धन्यवाद। इसलिए अनिवार्य रूप से आपका सुझाव '' mget() '' 'as'list (.SD) []' 'के बजाय' 'mget()' 'का उपयोग करना है?(मुझे पता है कि ''by =' 'के बाद आप जिस बिंदु का उपयोग करते हैं वह' 'list'' के लिए एक शॉर्टेंड है, ताकि कोड का थोड़ा सा उपरोक्त आपके वर्कअराउंड जैसा ही हो) (त्रुटि संदेश के बारे में, मुझे लगता है कि मैं केवल कॉपी करता हूं - ओपी के डेटा को दबाया, लेकिन डेटा.फ्रेम के माध्यम से नहीं गए।) – PatrickT