मैं कुछ डेटा मंगिंग के साथ संघर्ष कर रहा हूं। नीचे दी गई तालिका में जाने के लिए मैंने cid और time द्वारा Q1-Q10 के साधन खोजने के लिए group_by और summarise_at का उपयोग किया है (मैंने प्रत्येक cid के लिए और प्रत्येक समय बिंदु पर कई मानों के साथ शुरुआत की), फिर फ़िल्टर किया गया नीचे केवल 1 और 2 दोनों समय के बारे में दिखाई देने वाली सीआईडी ​​​​है। इसका उपयोग करना (या अगर कोई क्लीनर तरीका है तो मेरे कच्चे डेटा पर वापस जाना) मैं प्रत्येक cid के लिए गिनना चाहता हूं कि Q1- के कितने साधन हैं Q10 समय 2 पर बढ़ा, फिर, प्रत्येक GROUP के लिए वृद्धि की औसत संख्या को ध्यान में रखें।

GROUP  cid   time    Q1    Q2    Q3    Q4    Q5    Q6    Q7    Q8    Q9    Q10
A      169   1       4.45  4.09  3.91  3.73  3.82  4.27  3.55  4     4.55  3.91
A      169   2       4.56  4.15  4.06  3.94  4.09  4.53  3.91  3.97  4.12  4.21
A      184   1       4.64  4.18  3.45  3.64  3.82  4.55  3.91  4.27  4     3.55
A      184   2       3.9   3.6   3     3.6   3.4   3.9   3     3.5   3.2   3.1 
B      277   1       4.43  4.21  3.64  4.36  4.36  4.57  4.36  4.29  4.07  4.07
B      277   2       4.11  4     3.56  3.44  3.67  4     3.89  3.78  3.44  3.89
...

मैंने iris डेटा पर spread का उपयोग करते हुए उदाहरण देखे हैं लेकिन यह एक एकल चर पर अंतर के लिए था। किसी भी मदद की सराहना की।

1
Lyndon Walker 12 अप्रैल 2020, 10:33

1 उत्तर

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

ये कोशिश करें। आपको GROUP और Qs द्वारा औसत वृद्धि देता है:

df <- read.table(text = "GROUP  cid   time    Q1    Q2    Q3    Q4    Q5    Q6    Q7    Q8    Q9    Q10
A      169   1       4.45  4.09  3.91  3.73  3.82  4.27  3.55  4     4.55  3.91
A      169   2       4.56  4.15  4.06  3.94  4.09  4.53  3.91  3.97  4.12  4.21
A      184   1       4.64  4.18  3.45  3.64  3.82  4.55  3.91  4.27  4     3.55
A      184   2       3.9   3.6   3     3.6   3.4   3.9   3     3.5   3.2   3.1 
B      277   1       4.43  4.21  3.64  4.36  4.36  4.57  4.36  4.29  4.07  4.07
B      277   2       4.11  4     3.56  3.44  3.67  4     3.89  3.78  3.44  3.89", header = TRUE)

library(dplyr)
library(tidyr)

df %>% 
  # Convert to long
  pivot_longer(-c(GROUP, cid, time), names_to = "Q") %>% 
  # Group by GROUP, cid, Q
  group_by(GROUP, cid, Q) %>%
  # Just in case: sort by time
  arrange(time) %>% 
  # Increased at time 2 using lag
  mutate(is_increase = value > lag(value)) %>% 
  # Mean increase by GROUP and Q 
  group_by(GROUP, Q) %>% 
  summarise(mean_inc = mean(is_increase, na.rm = TRUE))
#> # A tibble: 20 x 3
#> # Groups:   GROUP [2]
#>    GROUP Q     mean_inc
#>    <fct> <chr>    <dbl>
#>  1 A     Q1         0.5
#>  2 A     Q10        0.5
#>  3 A     Q2         0.5
#>  4 A     Q3         0.5
#>  5 A     Q4         0.5
#>  6 A     Q5         0.5
#>  7 A     Q6         0.5
#>  8 A     Q7         0.5
#>  9 A     Q8         0  
#> 10 A     Q9         0  
#> 11 B     Q1         0  
#> 12 B     Q10        0  
#> 13 B     Q2         0  
#> 14 B     Q3         0  
#> 15 B     Q4         0  
#> 16 B     Q5         0  
#> 17 B     Q6         0  
#> 18 B     Q7         0  
#> 19 B     Q8         0  
#> 20 B     Q9         0

2020-04-12 को reprex पैकेज द्वारा बनाया गया (v0.3.0)

1
stefan 12 अप्रैल 2020, 07:53