R 如何将离散选择数据转换为二进制指标
我有一些离散选择数据,我想尝试使用该软件包,但不知道如何将数据转换为可用的形式,这似乎需要一组二进制变量来进行所有可能的选择 它由4591个关于8个选择集的观察组成,R 如何将离散选择数据转换为二进制指标,r,set,R,Set,我有一些离散选择数据,我想尝试使用该软件包,但不知道如何将数据转换为可用的形式,这似乎需要一组二进制变量来进行所有可能的选择 它由4591个关于8个选择集的观察组成,c1:c8,在子集{1,2,3},{4,5},{6,7}。。。{19,20}. data.framedoors看起来像这样,可以在这里找到 我想这正是你想要的。使用apply查找每行中的特定数字;您将其包装在对lappy的调用中,该调用通过从1到20的序列进行迭代;您可以使用Reduce(cbind)和as.data.frame将
c1:c8
,在子集{1,2,3},{4,5},{6,7}。。。{19,20}.
data.framedoors
看起来像这样,可以在这里找到
我想这正是你想要的。使用
apply
查找每行中的特定数字;您将其包装在对lappy
的调用中,该调用通过从1到20的序列进行迭代;您可以使用Reduce(cbind)
和as.data.frame
将生成的列表整理成数据帧;然后给数据框中的列起好名字。在调用apply
时,可以使用as.numeric(any(x==i))
来获取一个虚拟变量,该变量指示值i
是否出现在该行的任何位置
df <- lapply(seq(20), function(i) apply(doors[,1:8], 1, function(x) as.numeric(any(x == i, na.rm = TRUE))))
df <- Reduce(cbind, df)
df <- as.data.frame(df)
names(df) <- paste0("d", seq(20))
除了我的
doors
数据也有一个日期列之外,这或多或少是可行的,因此我在dd上使用了这个选项。在这种情况下,您不需要doors[,1:8]
部分,因为值1:20不会出现在日期列的任何位置。但是,是的,将操作限制在相关列可能仍然是一个好主意。
> tab <- table(stack(doors[,1:8]))
> names(dimnames(tab)) <- c("door", "choice")
> rownames(tab) <- paste0("d", 1:20)
> tab
choice
door c1 c2 c3 c4 c5 c6 c7 c8
d1 382 0 0 0 0 0 0 0
d2 2193 0 0 0 0 0 0 0
d3 2016 0 0 0 0 0 0 0
d4 0 2843 0 0 0 0 0 0
d5 0 1155 0 0 0 0 0 0
d6 0 0 2607 0 0 0 0 0
d7 0 0 1349 0 0 0 0 0
d8 0 0 0 654 0 0 0 0
d9 0 0 0 2174 0 0 0 0
d10 0 0 0 197 0 0 0 0
d11 0 0 0 0 2093 0 0 0
d12 0 0 0 0 367 0 0 0
d13 0 0 0 0 1585 0 0 0
d14 0 0 0 0 0 2449 0 0
d15 0 0 0 0 0 1466 0 0
d16 0 0 0 0 0 0 3004 0
d17 0 0 0 0 0 0 354 0
d18 0 0 0 0 0 0 591 0
d19 0 0 0 0 0 0 0 1581
d20 0 0 0 0 0 0 0 2092
>
df <- lapply(seq(20), function(i) apply(doors[,1:8], 1, function(x) as.numeric(any(x == i, na.rm = TRUE))))
df <- Reduce(cbind, df)
df <- as.data.frame(df)
names(df) <- paste0("d", seq(20))
> head(df)
d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20
758 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0
759 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0
760 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0
761 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0
762 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 1 0
763 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 1