मुझे अक्सर data.table से कम विचरण वाले कॉलमों को फ़िल्टर करने की आवश्यकता होती है। स्तंभ नाम पहले से ज्ञात नहीं हैं।
dt = data.table(mtcars)
# calculate standard deviation with arbitrary max value of 1:
mask = dt[,lapply(.SD, function(x) sd(x, na.rm = TRUE) > 1)]
# The columns with the FALSE values in row 1 need to be removed
mask.t = t(mask)
mask.t = which(mask.t)
dt[,mask.t,with=FALSE]
ऊपर दृष्टिकोण क्लंकी है। क्या किसी डेटा से बाहर कॉलम को फ़िल्टर करने का एक और अधिक सुरुचिपूर्ण तरीका है। जिसके लिए कॉलम सांख्यिकीय TRUE का मूल्यांकन करता है?
उत्तर:
उत्तर № 1 के लिए 1ये काम:
dt[, names(mask)[unlist(mask)], with=FALSE]
dt[, names(which(unlist(mask))), with=FALSE]
अब सब एक साथ:
variance.filter = function(df) {
mask = df[,lapply(.SD, function(x) sd(x,na.rm = TRUE) > 1)]
df = df[, names(mask)[unlist(mask)], with=FALSE]
}