如何在 R 中为大型数据集添加虚拟变量
How to add dummy variables in R for a large data set
我有一个包含列名的大型数据集:ID 和 属性。可能有多行共享同一个 ID,这意味着一个 ID 具有许多不同的属性(分类变量)。我想为 属性 添加虚拟变量,最后在每一行中获得一个具有不同 ID 的数据框,并使用 1/0 指示它是否具有 属性。原始数据有 200 万行和 10000 个不同的属性。因此,理想情况下,我将通过组合相同的 ID 并添加虚拟变量列(每个 属性 1 列)来缩小行大小。
R 在我使用以下代码时崩溃:
for(t in unique(df$property)){
df3[paste("property",t,sep="")] <- ifelse(df$property==t,1,0)
}
所以我想知道在 R 中为大型数据集添加虚拟变量列的最有效方法是什么?
我们可以直接使用table
as.data.frame.matrix(table(df1))
# A B C D
#1 1 1 0 0
#3 0 0 1 0
#4 0 0 0 1
#5 0 0 0 2
或者一个有效的方法是 dcast
来自 data.table
library(data.table)
dcast(setDT(df1), a~b, value.var = "a", length)
数据
df1 <- structure(list(a = c(1L, 1L, 3L, 4L, 5L, 5L), b = c("A", "B",
"C", "D", "D", "D")), .Names = c("a", "b"), row.names = c("1",
"2", "3", "4", "5", "6"), class = "data.frame")
我有一个包含列名的大型数据集:ID 和 属性。可能有多行共享同一个 ID,这意味着一个 ID 具有许多不同的属性(分类变量)。我想为 属性 添加虚拟变量,最后在每一行中获得一个具有不同 ID 的数据框,并使用 1/0 指示它是否具有 属性。原始数据有 200 万行和 10000 个不同的属性。因此,理想情况下,我将通过组合相同的 ID 并添加虚拟变量列(每个 属性 1 列)来缩小行大小。
R 在我使用以下代码时崩溃:
for(t in unique(df$property)){
df3[paste("property",t,sep="")] <- ifelse(df$property==t,1,0)
}
所以我想知道在 R 中为大型数据集添加虚拟变量列的最有效方法是什么?
我们可以直接使用table
as.data.frame.matrix(table(df1))
# A B C D
#1 1 1 0 0
#3 0 0 1 0
#4 0 0 0 1
#5 0 0 0 2
或者一个有效的方法是 dcast
来自 data.table
library(data.table)
dcast(setDT(df1), a~b, value.var = "a", length)
数据
df1 <- structure(list(a = c(1L, 1L, 3L, 4L, 5L, 5L), b = c("A", "B",
"C", "D", "D", "D")), .Names = c("a", "b"), row.names = c("1",
"2", "3", "4", "5", "6"), class = "data.frame")