如何在R中将数据帧从行级别重塑为人员级别
我有以下代码用于Netflix实验,以降低Netflix的价格,看看人们看电视的次数是多还是少。每次有人使用Netflix时,它都会显示他们观看了什么以及观看了多长时间如何在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_
**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