मेरे पास एक डेटा है। तालिका निम्नानुसार है:

panelID = c(1:50)   
year= c(2001:2010)
country = c("NLD", "BEL", "GER")
urban = c("A", "B", "C")
indust = c("D", "E", "F")
sizes = c(1,2,3,4,5)
n <- 2
library(data.table)
set.seed(123)
DT <- data.table(panelID = rep(sample(panelID), each = n),
                 country = rep(sample(country, length(panelID), replace = T), each = n),
                 year = c(replicate(length(panelID), sample(year, n))),
                 some_NA = sample(0:5, 6),                                             
                 some_NA_factor = sample(0:5, 6), 
                 industry = rep(sample(indust, length(panelID), replace = T), each = n),
                 urbanisation = rep(sample(urban, length(panelID), replace = T), each = n),
                 size = rep(sample(sizes, length(panelID), replace = T), each = n),
                 norm = round(runif(100)/10,2),
                 sales= round(rnorm(10,10,10),2),
                 Happiness = sample(10,10),
                 Sex = round(rnorm(10,0.75,0.3),2),
                 Age = sample(100,100),
                 Educ = round(rnorm(10,0.75,0.3),2))        
DT [, uniqueID := .I]                                                         # Creates a unique ID     
DT[DT == 0] <- NA 
DT$sales[DT$sales< 0] <- NA 
DT <- as.data.frame(DT)

setDT(DT)[,Mean_Sales_pergroup := mean(sales, na.rm=TRUE),  by=c("industry", "year")]

अब मैं तुलना करना चाहता हूं कि वर्षों में Mean_Sales_pergroup प्रति industry कैसे भिन्न होता है, इसलिए मैंने कोशिश करने के बारे में सोचा:

table(DT$Mean_Sales_pergroup, DT$year)

लेकिन यह मुझे देता है:

                   2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
  2.11                0    0    0    0    0    0    1    0    0    0
  2.18                0    0    0    0    0    0    0    0    0    1
  2.61                2    0    0    0    0    0    0    1    0    0
  3.6775              0    0    0    0    4    0    0    0    0    0
  ...
  14.19               0    0    0    0    0    0    0    2    0    0

जो बेशक कुछ भी हो लेकिन जानकारीपूर्ण हो।

मैं कुछ पाने के लिए क्या कर सकता था:

           2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
Industry D  ..
Industry E
Industry F

संपादित करें:

@ rg255 की टिप्पणी देता है:

dcast(DT, industry ~ year, value.var = "Mean_Sales_pergroup")
Aggregate function missing, defaulting to 'length'
   industry 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
1:        D    1    1    5    5    3    4    1    1    6    1
2:        E    2    5    5    3    4    3    3    1    3    5
3:        F    1    6    2    3    4    7    5    2    4    4
2
Tom 26 मार्च 2020, 15:05
मैं उन संख्याओं के बारे में निश्चित नहीं हूं जिनकी आप उम्मीद करते हैं, लेकिन क्या: dcast(DT, industry ~ year, value.var = "Mean_Sales_pergroup") वह करते हैं जो आप चाहते/उम्मीद करते हैं?
 – 
rg255
26 मार्च 2020, 15:13
आपके कमेंट के लिए धन्यवाद! यह पहले से ही सही दिशा में एक कदम है, लेकिन मुझे लगता है कि मैं साधनों की घटनाओं के बजाय साधनों को देखने की उम्मीद कर रहा था।
 – 
Tom
26 मार्च 2020, 15:16
1
यही मेरा लक्ष्य था लेकिन फोन पर काम करना यह देखना आसान नहीं था कि मैं सफल हुआ या नहीं: डी
 – 
rg255
26 मार्च 2020, 15:36

2 जवाब

सबसे बढ़िया उत्तर

अद्वितीय पंक्तियाँ बनाना फिर कास्ट करना

dcast(unique(DT[, .(industry, year, Mean_Sales_pergroup)]), ... ~ year)

वांछित आउटपुट देता है

   industry  2001  2002   2003     2004    2005     2006     2007  2008
1:        D  2.61 4.260  6.204 9.650000 10.7050 8.625000 2.110000  2.61
2:        E 13.24 6.766  9.940 5.156667  3.6775 9.225000 4.606667 13.24
3:        F  2.61 8.000  ...
4
rg255 26 मार्च 2020, 15:43
1
बहुत अच्छा! शुक्रिया!
 – 
Tom
26 मार्च 2020, 15:25

क्योंकि आपके पास के लिए Mean_Sales_pergroup का 0 या 1 अद्वितीय उदाहरण है industry और year का हर संभव संयोजन, आप भी कर सकते हैं इसे इस प्रकार हल करें:

dcast(DT, industry ~ year, fun = function(x) x[1], value.var = "Mean_Sales_pergroup")
1
B. Christian Kamgang 26 मार्च 2020, 16:02