Варианты использования с более высоким значением для одной переменной для каждого случая другой переменной в R - PullRequest
0 голосов
/ 04 марта 2020

Я делаю мета-анализ в R. Для каждого исследования (переменная StudyID) у меня есть несколько размеров эффекта. Для некоторых исследований у меня есть один и тот же размер эффекта несколько раз в зависимости от уровня знакомства (переменная фамильярность) между субъектами.

head(dat)
   studyID A.C.Extent Visibility Familiarity p_t_cov group.size same.sex  N published
1       1        3.0        5.0           1  0.0462          4        0  44         1
2       1        5.0        2.5           1  0.1335          4        0  44         1
3       1        2.5        3.0           1 -0.1239          4        0  44         1
4       1        2.5        3.5           1  0.2062          4        0  44         1
5       1        2.5        3.0           1 -0.0370          4        0  44         1
6       1        3.0        5.0           1 -0.3850          4        0  44         1

Это первые строки набора данных. Всего более 50 исследований. Большинство исследований выглядят как исследование 1 с одинаковым значением в «Знакомстве» для всех величин эффекта. В некоторых исследованиях существуют величины эффекта с несколькими уровнями знакомства. Например, исследование 36, как показано ниже.

head(dat)
      studyID A.C.Extent Visibility Familiarity p_t_cov group.size same.sex  N published
142      36        1.0        4.5           0  0.1233       5.00        0  311         1
143      36        3.5        3.0           0  0.0428       5.00        0  311         1
144      36        1.0        4.5           0  0.0986       5.00        0  311         1
145      36        1.0        4.5           1 -0.0520       5.00        0  311         1
146      36        1.5        2.5           1 -0.0258       5.00        0  311         1
147      36        3.5        3.0           1  0.1104       5.00        0  311         1
148      36        1.0        4.5           1  0.0282       5.00        0  311         1
149      36        1.0        4.5           2 -0.1724       5.00        0  311         1
150      36        3.5        3.0           2  0.2646       5.00        0  311         1
151      36        1.0        4.5           2 -0.1426       5.00        0  311         1
152      37        3.0        4.0           1  0.0118       5.35        0  123         0
153      37        1.0        4.5           1 -0.3205       5.35        0  123         0
154      37        2.5        3.0           1 -0.2356       5.35        0  123         0
155      37        3.0        2.0           1  0.1372       5.35        0  123         0
156      37        2.5        2.5           1 -0.1401       5.35        0  123         0
157      37        3.0        3.5           1 -0.3334       5.35        0  123         0
158      37        2.5        2.5           1  0.0317       5.35        0  123         0
159      37        1.0        3.0           1 -0.3025       5.35        0  123         0
160      37        1.0        3.5           1 -0.3248       5.35        0  123         0

Теперь я хочу, чтобы в тех исследованиях, которые включают несколько уровней знакомства, были взяты строки только с одним уровнем знакомства (две отдельные версии: одна с нижней, один с более высоким знакомством). Я думаю, что это возможно с пакетом dplyr, но у меня пока нет реального кода.

На втором шаге я хотел бы дать этим строкам уникальные идентификаторы studyID для каждого уровня знакомства (поэтому создайте из изучите 36 три "разных" исследования).

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Если вы хотите использовать dplyr, вы можете создать альтернативный идентификатор или регистрационный номер, используя group_indices:

df <- df %>%
  mutate(case_num = group_indices(.dots=c("studyID", "Familiarity")))
0 голосов
/ 04 марта 2020

Вы можете сделать:

library(dplyr)

df %>%
  group_by(studyID) %>%
  mutate(nDist = n_distinct(Familiarity) > 1) %>%
  ungroup() %>%
  mutate(
    studyID = case_when(nDist ~ paste(studyID, Familiarity, sep = "_"), TRUE ~ studyID %>% as.character),
    nDist = NULL
  )

Вывод:

# A tibble: 19 x 9
   studyID A.C.Extent Visibility Familiarity p_t_cov group.size same.sex     N published
   <chr>        <dbl>      <dbl>       <int>   <dbl>      <dbl>    <int> <int>     <int>
 1 36_0           1          4.5           0  0.123        5           0   311         1
 2 36_0           3.5        3             0  0.0428       5           0   311         1
 3 36_0           1          4.5           0  0.0986       5           0   311         1
 4 36_1           1          4.5           1 -0.052        5           0   311         1
 5 36_1           1.5        2.5           1 -0.0258       5           0   311         1
 6 36_1           3.5        3             1  0.110        5           0   311         1
 7 36_1           1          4.5           1  0.0282       5           0   311         1
 8 36_2           1          4.5           2 -0.172        5           0   311         1
 9 36_2           3.5        3             2  0.265        5           0   311         1
10 36_2           1          4.5           2 -0.143        5           0   311         1
11 37             3          4             1  0.0118       5.35        0   123         0
12 37             1          4.5           1 -0.320        5.35        0   123         0
13 37             2.5        3             1 -0.236        5.35        0   123         0
14 37             3          2             1  0.137        5.35        0   123         0
15 37             2.5        2.5           1 -0.140        5.35        0   123         0
16 37             3          3.5           1 -0.333        5.35        0   123         0
17 37             2.5        2.5           1  0.0317       5.35        0   123         0
18 37             1          3             1 -0.302        5.35        0   123         0
19 37             1          3.5           1 -0.325        5.35        0   123         0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...