有一个向量和一个数据帧。向量是原始数据,它记录了调查对象的回答(他们必须从三者中选择一个),因此它表示1-3。数据帧将组织来自第一个d.f的结果。我需要的是将每个试验的结果从向量中拖出,并在d.f中用新列“选择”进行指示。
我将在d中创建一个新的“选择”列。对于每个试验,从受访者中选择的备选方案在“选择”列中将为1,否则为0。我首先需要找到与d.f $ trial与向量中列名“ conjoint_full_info”之后的数字匹配的所选值。找到该值后,我需要在“选择”列中以“ 1”表示,并带有相应的替代行。 (通过查看向量,在试验1中,被访者选择了替代项1。因此,在选择的列中指示“ 1”以及列alternative = 1行。其余的2行则为“ 0”)我正在寻找一个应用于以下每个集合的方法,但我不确定如何以有效的方式对此进行编码。也许使用for循环?抱歉,解释不清楚,谢谢!!
这是两个数据集的方式
0
答案 0 :(得分:1)
您的数据:
Vector <- c(conjoint_full_info.1. = 1, conjoint_full_info.2. = 2, conjoint_full_info.3. = 2,
conjoint_full_info.4. = 2)
d.f <- structure(list(Ind = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L), .Label = "R_2Xb32PAT3WjGBnc", class = "factor"),
Trial = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L),
alternative = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L,
3L), price = c(2L, 3L, 1L, 1L, 2L, 3L, 3L, 1L, 2L, 1L, 2L,
3L), privacy = c(3L, 1L, 2L, 2L, 3L, 1L, 1L, 2L, 3L, 1L,
2L, 3L), battery = c(1L, 2L, 3L, 2L, 3L, 1L, 3L, 1L, 2L,
1L, 2L, 3L), stars = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L,
2L, 3L, 1L)), class = "data.frame", row.names = c("1", "2",
"3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))
我们创建一个映射向量:
mapVector = Vector
names(mapVector) = sapply(strsplit(names(Vector),"[.]"),"[[",2)
# now mapVector has names that match trial
mapVector
1 2 3 4
1 2 2 2
如果我们执行mapVector[as.character(d.f$Trial)]
,我们将为每一行获得所选的替代项:
head(cbind(d.f,mapVector[as.character(d.f$Trial)]))
Ind Trial alternative price privacy battery stars
1 R_2Xb32PAT3WjGBnc 1 1 2 3 1 1
2 R_2Xb32PAT3WjGBnc 1 2 3 1 2 2
3 R_2Xb32PAT3WjGBnc 1 3 1 2 3 3
4 R_2Xb32PAT3WjGBnc 2 1 1 2 2 1
5 R_2Xb32PAT3WjGBnc 2 2 2 3 3 2
6 R_2Xb32PAT3WjGBnc 2 3 3 1 1 3
mapVector[as.character(d.f$Trial)]
1 1
2 1
3 1
4 2
5 2
6 2
因此,创建另一个列来检查是否与替代列一致是一个问题:
library(dplyr)
d.f %>%
mutate(chosen=as.numeric(alternative == mapVector[as.character(Trial)]))
Ind Trial alternative price privacy battery stars chosen
1 R_2Xb32PAT3WjGBnc 1 1 2 3 1 1 1
2 R_2Xb32PAT3WjGBnc 1 2 3 1 2 2 0
3 R_2Xb32PAT3WjGBnc 1 3 1 2 3 3 0
4 R_2Xb32PAT3WjGBnc 2 1 1 2 2 1 0
5 R_2Xb32PAT3WjGBnc 2 2 2 3 3 2 1
6 R_2Xb32PAT3WjGBnc 2 3 3 1 1 3 0
7 R_2Xb32PAT3WjGBnc 3 1 3 1 3 1 0
8 R_2Xb32PAT3WjGBnc 3 2 1 2 1 2 1
9 R_2Xb32PAT3WjGBnc 3 3 2 3 2 3 0
10 R_2Xb32PAT3WjGBnc 4 1 1 1 1 2 0
11 R_2Xb32PAT3WjGBnc 4 2 2 2 2 3 1
12 R_2Xb32PAT3WjGBnc 4 3 3 3 3 1 0