【问题标题】:R make new columns from uniqe values in column dynamically [duplicate]R从列中的唯一值动态创建新列[重复]
【发布时间】:2016-10-18 18:42:34
【问题描述】:

我想根据一列中的唯一值动态创建新列。原文:

id, category
1, a
2, b
3, c
4, b

新:

id, category, a, b, c
1, a, 1, 0, 0
2, b, 0, 1, 0
3, c, 0, 0, 1
4, b, 0, 1, 0

现在我愿意:

data$categoryA = ifelse(data$category=="a", 1, 0)
data$categoryB = ifelse(data$category=="b", 1, 0)
...

但我想动态地这样做:

for(CATEGORY in unique(data$category) {
  data$CATEGORY  = ifelse(data$CATEGORY =="a", 1, 0)
}

【问题讨论】:

  • 我觉得这个问题至少被问了 45k 次

标签: r dataframe multiple-columns


【解决方案1】:

我们可以申请table,用原始数据集将其转换为data.framecbind

cbind(df1, as.data.frame.matrix(table(df1)))
#  id category a b c
#1  1        a 1 0 0
#2  2        b 0 1 0
#3  3        c 0 0 1
#4  4        b 0 1 0

【讨论】:

    【解决方案2】:

    我用:

    factor2binary=function(inputvar)
    {
        set.l <- unique(inputvar)
    x=(sapply(set.l, function(x) as.numeric( inputvar == x)))
    colnames(x)=unique(inputvar)
    x
    }
    
    
    A=sample(LETTERS[1:4],100,rep=T
    factor2binary(A)
    
         D A C B
    [1,] 1 0 0 0
    [2,] 1 0 0 0
    [3,] 0 1 0 0
    [4,] 1 0 0 0
    [5,] 0 0 1 0
    [6,] 0 1 0 0
          ...
    

    【讨论】:

      【解决方案3】:

      您提议的代码无法运行,因为您使用data$VARIABLE 在数据框中创建新变量:

      for(CATEGORY in unique(data$category) {
        data$CATEGORY  = ifelse(data$CATEGORY =="a", 1, 0)
      }
      

      如果使用,这可能会按预期工作

      for(CATEGORY in unique(data$category) {
        data[[CATEGORY]]  = ifelse(data$CATEGORY =="a", 1, 0)
      }
      

      【讨论】:

        猜你喜欢
        • 2015-05-20
        • 1970-01-01
        • 1970-01-01
        • 2021-08-21
        • 1970-01-01
        • 2020-09-23
        • 2021-11-19
        • 1970-01-01
        • 2012-10-29
        相关资源
        最近更新 更多