代码之家  ›  专栏  ›  技术社区  ›  Sheldon

如何在R中为大型数据集添加虚拟变量[重复]

  •  1
  • Sheldon  · 技术社区  · 8 年前

    我有一个包含列名的大型数据集:ID和Property。可能有多行共享相同的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中为大型数据集添加虚拟变量列的最有效方法是什么?

    1 回复  |  直到 8 年前
        1
  •  1
  •   akrun    8 年前

    我们可以用 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")