खोज…


प्रत्येक स्तंभ का योग

मान लें कि हमें किसी कॉलम में प्रत्येक कॉलम का 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]   


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow