Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中将数据帧从行级别重塑为人员级别_R_Dplyr_Reshape - Fatal编程技术网

如何在R中将数据帧从行级别重塑为人员级别

如何在R中将数据帧从行级别重塑为人员级别,r,dplyr,reshape,R,Dplyr,Reshape,我有以下代码用于Netflix实验,以降低Netflix的价格,看看人们看电视的次数是多还是少。每次有人使用Netflix时,它都会显示他们观看了什么以及观看了多长时间 **library(tidyverse) sample_size <- 10000 set.seed(853) viewing_data <- tibble(unique_person_id = sample(x = c(1:100), size = sample_size, replace = TRUE), tv_

我有以下代码用于Netflix实验,以降低Netflix的价格,看看人们看电视的次数是多还是少。每次有人使用Netflix时,它都会显示他们观看了什么以及观看了多长时间

**library(tidyverse)
sample_size <- 10000
set.seed(853)
viewing_data <-
tibble(unique_person_id = sample(x = c(1:100),
size = sample_size,
replace = TRUE),
tv_show = sample(x = c("Broadchurch", "Duty-Shame", "Drive to Survive", "Shetland", "The Crown"),
size = sample_size,
replace = TRUE),
)**
**库(tidyverse)
样本大小
库(dplyr)
治疗%
不同的(唯一的个人id)%>%
变异(处理过的=样本(c(“是”、“否”),大小=100,替换=真))
查看\u数据%>%
左加入(治疗,由=“唯一的人”\u id)
如果需要,您可以更改采样方式…

库(dplyr)
治疗%
不同的(唯一的个人id)%>%
变异(处理过的=样本(c(“是”、“否”),大小=100,替换=真))
查看\u数据%>%
左加入(治疗,由=“唯一的人”\u id)

如果需要,您可以更改采样方式…

您可以执行以下操作,这将按人员id对您的观察结果进行分组,并为每组分配唯一的“治疗/控制”:

library(dplyr)
viewing_data %>% 
group_by(unique_person_id) %>% 
mutate(group=sample(c("treated","control"),1))

# A tibble: 10,000 x 3
# Groups:   unique_person_id [100]
   unique_person_id tv_show          group  
              <int> <chr>            <chr>  
 1                9 Drive to Survive control
 2               64 Shetland         treated
 3               90 The Crown        treated
 4               93 Drive to Survive treated
 5               17 Duty-Shame       treated
 6               29 The Crown        control
 7               84 Broadchurch      control
 8               83 The Crown        treated
 9                3 The Crown        control
10               33 Broadchurch      control
# … with 9,990 more rows
库(dplyr)
查看\u数据%>%
分组依据(唯一个人id)%>%
突变(组=样本(c(“治疗组”、“对照组”),1))
#一个tibble:10000 x 3
#组:唯一的个人id[100]
独特的个人身份证电视节目组
1.9驾驶以生存控制
2 64个设得兰群岛
3.90牙冠治疗
493“求生之路”治疗
5.17税务局局长
6.29皇冠控制
7 84布罗德彻奇控制中心
8 83治疗过的皇冠
9.3皇冠控制
10 33布罗德彻奇控制中心
#…还有9990行
我们可以检查我们的结果,所有ID只有一组治疗/对照组:

newdata <- viewing_data %>% 
    group_by(unique_person_id) %>% 
    mutate(group=sample(c("treated","control"),1))

tapply(newdata$group,newdata$unique_person_id,n_distinct)
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 
  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
 21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40 
  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
 41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60 
  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
 61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80 
  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
 81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 
  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
newdata%
分组依据(唯一个人id)%>%
突变(组=样本(c(“治疗组”、“对照组”),1))
tapply(新数据$group,新数据$unique\u person\u id,n\u distinct)
1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40 
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60 
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80 
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 

您可以执行以下操作,这将根据个人id对您的观察结果进行分组,并为每组分配唯一的“治疗/控制”:

library(dplyr)
viewing_data %>% 
group_by(unique_person_id) %>% 
mutate(group=sample(c("treated","control"),1))

# A tibble: 10,000 x 3
# Groups:   unique_person_id [100]
   unique_person_id tv_show          group  
              <int> <chr>            <chr>  
 1                9 Drive to Survive control
 2               64 Shetland         treated
 3               90 The Crown        treated
 4               93 Drive to Survive treated
 5               17 Duty-Shame       treated
 6               29 The Crown        control
 7               84 Broadchurch      control
 8               83 The Crown        treated
 9                3 The Crown        control
10               33 Broadchurch      control
# … with 9,990 more rows
库(dplyr)
查看\u数据%>%
分组依据(唯一个人id)%>%
突变(组=样本(c(“治疗组”、“对照组”),1))
#一个tibble:10000 x 3
#组:唯一的个人id[100]
独特的个人身份证电视节目组
1.9驾驶以生存控制
2 64个设得兰群岛
3.90牙冠治疗
493“求生之路”治疗
5.17税务局局长
6.29皇冠控制
7 84布罗德彻奇控制中心
8 83治疗过的皇冠
9.3皇冠控制
10 33布罗德彻奇控制中心
#…还有9990行
我们可以检查我们的结果,所有ID只有一组治疗/对照组:

newdata <- viewing_data %>% 
    group_by(unique_person_id) %>% 
    mutate(group=sample(c("treated","control"),1))

tapply(newdata$group,newdata$unique_person_id,n_distinct)
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 
  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
 21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40 
  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
 41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60 
  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
 61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80 
  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
 81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 
  1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
newdata%
分组依据(唯一个人id)%>%
突变(组=样本(c(“治疗组”、“对照组”),1))
tapply(新数据$group,新数据$unique\u person\u id,n\u distinct)
1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40 
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60 
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80 
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 
81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 
1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1 

如果您希望将人员随机分配到两组(完全随机分配),您可以使用以下代码

library(dplyr)

Persons <- viewing_data %>%
  distinct(unique_person_id) %>%
  mutate(group=sample(100),  # in case the ids are not truly random
         group=ifelse(group %% 2 == 0, 0, 1))  # works if only two groups
Persons


如果您希望将人员随机分配到两组(完全随机分配),并且平均分配到两组(完全随机分配),您可以使用以下代码

library(dplyr)

Persons <- viewing_data %>%
  distinct(unique_person_id) %>%
  mutate(group=sample(100),  # in case the ids are not truly random
         group=ifelse(group %% 2 == 0, 0, 1))  # works if only two groups
Persons


你想要相同数量的治疗和非治疗吗?你想要相同数量的治疗和非治疗吗?
# A tibble: 2 x 2
  group     n
  <dbl> <int>
1     0    50
2     1    50
library(randomizr)

Persons <- viewing_data %>%
  distinct(unique_person_id) %>%
  mutate(group=complete_ra(N=100, m=50))

Persons %>% count(group) # Check
viewing_data %>% inner_join(Persons, by="unique_person_id")

# A tibble: 10,000 x 3
   unique_person_id tv_show          group
              <int> <chr>            <int>
 1               10 Shetland             1
 2               95 Broadchurch          0
 3                7 Duty-Shame           1
 4               68 Drive to Survive     0
 5               17 Drive to Survive     1
 6               70 Shetland             0
 7               78 Drive to Survive     0
 8               21 Broadchurch          1
 9               80 The Crown            0
10               70 Shetland             0
# ... with 9,990 more rows