R动态地从列中的uniqe值创建新列

时间:2016-10-18 18:42:34

标签: r dataframe multiple-columns

我想动态地在一列中基于唯一值创建新列。原文:

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)
}

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您提议的代码无法使用,因为您使用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)
}

答案 2 :(得分:0)

我用:

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
      ...