R Language
कॉलम वार ऑपरेशन
खोज…
प्रत्येक स्तंभ का योग
मान लें कि हमें किसी कॉलम में प्रत्येक कॉलम का sum
करने की आवश्यकता है
set.seed(20)
df1 <- data.frame(ID = rep(c("A", "B", "C"), each = 3), V1 = rnorm(9), V2 = rnorm(9))
m1 <- as.matrix(df1[-1])
इसे करने के कई तरीके हैं। base R
का उपयोग करते हुए, सबसे अच्छा विकल्प colSums
होगा
colSums(df1[-1], na.rm = TRUE)
यहाँ, हम पहले कॉलम हटा दिया यह गैर-संख्यात्मक है के रूप में और किया sum
, प्रत्येक स्तंभ के निर्दिष्ट करने na.rm = TRUE
(मामले में डाटासेट में किसी भी NAS कर रहे हैं)
यह matrix
साथ भी काम करता matrix
colSums(m1, na.rm = TRUE)
यह एक पाश में lapply/sapply/vapply
साथ किया जा सकता है
lapply(df1[-1], sum, na.rm = TRUE)
यह ध्यान दिया जाना चाहिए कि आउटपुट एक list
। अगर हमें vector
आउटपुट की आवश्यकता है
sapply(df1[-1], sum, na.rm = TRUE)
या
vapply(df1[-1], sum, na.rm = TRUE, numeric(1))
मैट्रिसेस के लिए, यदि हम कॉलम के माध्यम से लूप करना चाहते हैं, तो MARGIN = 1
साथ apply
करें
apply(m1, 2, FUN = sum, na.rm = TRUE)
dplyr
या data.table
जैसे पैकेज के साथ ऐसा करने के तरीके हैं
library(dplyr)
df1 %>%
summarise_at(vars(matches("^V\\d+")), sum, na.rm = TRUE)
यहां, हम स्तंभ नाम से मेल खाने के लिए एक नियमित अभिव्यक्ति दे रहे हैं, जिसे हमें sum
में summarise_at
में प्राप्त करने की आवश्यकता है। रेगेक्स उन सभी स्तंभों से मेल खाएगा जो V
साथ शुरू होते हैं उसके बाद एक या अधिक संख्याएँ ( \\d+
)।
एक data.table
विकल्प है
library(data.table)
setDT(df1)[, lapply(.SD, sum, na.rm = TRUE), .SDcols = 2:ncol(df1)]
हम 'data.cef' को 'data.table' ( setDT(df1)
) में .SDcols
करते हैं, फ़ंक्शन को .SDcols
और पाश में डेटासेटेबल ( .SD
) के माध्यम से फ़ंक्शन को लागू करने और sum
प्राप्त करने के लिए निर्दिष्ट करते हैं।
यदि हमें किसी समूह को ऑपरेशन द्वारा उपयोग करने की आवश्यकता है, तो हम समूह / कॉलम द्वारा निर्दिष्ट करके यह आसानी से कर सकते हैं
df1 %>%
group_by(ID) %>%
summarise_at(vars(matches("^V\\d+")), sum, na.rm = TRUE)
ऐसे मामलों में जहां हमें सभी कॉलमों के sum
की आवश्यकता sum
है, summarise_each
बजाय summarise_at
का उपयोग किया जा सकता है
df1 %>%
group_by(ID) %>%
summarise_each(funs(sum(., na.rm = TRUE)))
data.table
विकल्प है
setDT(df1)[, lapply(.SD, sum, na.rm = TRUE), by = ID]