तो मैं जो करने की कोशिश कर रहा हूं वह प्रत्येक पंक्ति के लिए एक माध्य बनाना है, लेकिन केवल हर दूसरे कॉलम को शामिल करना है। एक उदाहरण df होगा:
C1<-c(3,2,4,4,5)
C2<-c(3,7,3,4,5)
C3<-c(5,4,3,6,3)
C4<-c(5,4,3,6,3)
C5<-c(5,6,3,6,2)
C6<-c(5,5,3,6,4)
C7<-c(5,6,3,6,1)
C8<-c(5,7,3,6,2)
DF<-data.frame(ID=c("A","B","C","D","E"),C1=C1,C2=C2,C3=C3, C4=C4, C5=C5, C6=C6, C7=C7, C8=C8)
DF
ID C1 C2 C3 C4 C5 C6 C7 C8
1 A 3 3 5 5 5 5 5 5
2 B 2 7 4 4 6 5 6 7
3 C 4 3 3 3 3 3 3 3
4 D 4 4 6 6 6 6 6 6
5 E 5 5 3 3 2 4 1 2
तो अब मैं C2, C4, C6 और C8 के माध्य की गणना करना चाहता हूं और इसे df में एक नए कॉलम के रूप में जोड़ना चाहता हूं। मैंने जो कोशिश की वह यह है:
DF$mean <- rowMeans(DF[seq(2, nrow(dat_all_b), 2),])
यह उत्पन्न त्रुटि है: "फ़ेहलर इन $<-.data.frame
(*tmp*
, फ़्रीक्वेंसी_मीन, मान = c(350
= NA, : प्रतिस्थापन में 14 पंक्तियाँ हैं, डेटा में 30" फेहलर = त्रुटि
मेरे वास्तविक डीएफ में अधिक कॉलम हैं और मैं हर दूसरे कॉलम में माध्य की गणना करना चाहता हूं। अपेक्षित उत्पादन:
DF
ID C1 C2 C3 C4 C5 C6 C7 C8 mean_1
1 A 3 3 5 5 5 5 5 5 4,5
2 B 2 7 4 4 6 5 6 7 5,75
3 C 4 3 3 3 3 3 3 3 3
4 D 4 4 6 6 6 6 6 6 5,5
5 E 5 5 3 3 2 4 1 2 3,5
किसी भी तरह की सहायता को आभार समझेंगे!
4 जवाब
आप प्रत्येक दूसरे कॉलम के लिए rowMeans
का उपयोग इस प्रकार कर सकते हैं:
DF$mean_1 <- rowMeans(DF[seq(3, ncol(DF), 2)], na.rm = TRUE)
DF
# ID C1 C2 C3 C4 C5 C6 C7 C8 mean_1
#1 A 3 3 5 5 5 5 5 5 4.50
#2 B 2 7 4 4 6 5 6 7 5.75
#3 C 4 3 3 3 3 3 3 3 3.00
#4 D 4 4 6 6 6 6 6 6 5.50
#5 E 5 5 3 3 2 4 1 2 3.50
यह C2
, C4
, C6
और C8
का माध्य देता है। मुझे यकीन नहीं है कि आपको mean_2
नामक किसी अन्य कॉलम की आवश्यकता है, जिसका मतलब C1
, C3
, C5
और C7
होगा?
मैं लागू परिवार को देखने का सुझाव दूंगा। इस मामले में, लागू करें का उपयोग करके और मार्जिन को 1 पर सेट करें (पंक्ति द्वारा - इसे 2 पर सेट करते समय आपको कॉलम द्वारा माध्य मिलेगा) समस्या का समाधान करेगा।
DF$mean <- apply(DF[,2:ncol(DF)], 1, mean)
कृपया ध्यान दें, यह अधिक लचीला है क्योंकि आप कई अन्य मामलों में भी जल्दी से अनुकूलित कर सकते हैं। एक उदाहरण के रूप में, पंक्ति द्वारा अधिकतम मान प्राप्त करने के लिए आप अपने डेटाफ़्रेम पर पंक्ति द्वारा अधिकतम फ़ंक्शन लागू कर सकते हैं:
DF$max <- apply(DF[,2:ncol(DF)], 1, max)
यदि हम ID
कॉलम छोड़ते हैं तो यह आपको प्रत्येक सम संख्या वाले कॉलम का माध्य देगा।
DF$mean_1 <- rowMeans(DF[(seq_along(DF)[(seq_along(DF) %% 2 == 1)])][-1])
ID C1 C2 C3 C4 C5 C6 C7 C8 mean_1
1 A 3 3 5 5 5 5 5 5 4.50
2 B 2 7 4 4 6 5 6 7 5.75
3 C 4 3 3 3 3 3 3 3 3.00
4 D 4 4 6 6 6 6 6 6 5.50
5 E 5 5 3 3 2 4 1 2 3.50
यहाँ एक dplyr समाधान है:
library(tidyverse)
DF %>%
rowwise() %>%
mutate(mean = mean(c(C1, C2), na.rm=TRUE))