Поиск различий в нескольких столбцах и подсчет изменений - PullRequest
1 голос
/ 12 апреля 2020

Я борюсь с некоторыми манипуляциями с данными. Чтобы добраться до таблицы ниже, я использовал group_by и summarise_at, чтобы найти средства Q1-Q10 по cid и time (я начал с нескольких значений для каждого cid и в каждый момент времени), затем отфильтровал, чтобы просто получить cids, которые появляются примерно во время 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
...

Я видел примеры использования spread на iris данных, но это было для разницы по одной переменной. Любая помощь приветствуется.

1 Ответ

1 голос
/ 12 апреля 2020

Попробуйте это. Дает вам среднее увеличение по 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 пакетом Представитель (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...