【发布时间】:2018-03-28 04:20:29
【问题描述】:
我已经在网上搜索过,但没有找到答案。我有一个包含多列的大 data.frame。每列是一个因子变量。
我想转换 data.frame,使得因子变量的每个可能值都是一个变量,如果变量存在于因子列中,则该变量包含“1”,否则为“0”。
这是我的意思的一个例子。
labels <- c("1", "2", "3", "4", "5", "6", "7")
#create data frame (note, not all factor levels have to be in the columns,
#NA values are possible)
input <- data.frame(ID = c(1, 2, 3),
Cat1 = factor(c( 4, 1, 1), levels = labels),
Cat2 = factor(c(2, NA, 4), levels = labels),
Cat3 = factor(c(7, NA, NA), levels = labels))
#the seven factor levels now are the variables of the data.frame
desired_output <- data.frame(ID = c(1, 2, 3),
Dummy1 = c(0, 1, 1),
Dummy2 = c(1, 0, 0),
Dummy3 = c(0, 0, 0),
Dummy4 = c(1, 0, 1),
Dummy5 = c(0, 0, 0),
Dummy6 = c(0, 0, 0),
Dummy7 = c(1, 0, 0))
input
ID Cat1 Cat2 Cat3
1 4 2 7
2 1 <NA> <NA>
3 1 4 <NA>
desired_output
ID Dummy1 Dummy2 Dummy3 Dummy4 Dummy5 Dummy6 Dummy7
1 0 1 0 1 0 0 1
2 1 0 0 0 0 0 0
3 1 0 0 1 0 0 0
我的实际 data.frame 有超过 3000 行和超过 100 个级别的因子。 希望您能帮我将输入转换为所需的输出。
问候 嗖嗖嗖
【问题讨论】:
-
我认为有些不一致;
Cat2(id 2) 包含 4,Cat3没有,但你的desired_output(我认为) 有这些反转。如果我在这里错了,那我真的很困惑。此外,对于您的实际 data.frame,您是否期望得到一个包含 101 列的 data.frame? -
抱歉,代码存在一些格式问题。我纠正了它。我希望现在我的意思很清楚。是的,我想要一个包含 101 列的 data.frame。
-
如果在每一列上使用 lapply?如果因子存在,则为 1,否则为 0?
标签: r dummy-variable