Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R根据列中的uniqe值动态创建新列_R_Dataframe_Multiple Columns - Fatal编程技术网

R根据列中的uniqe值动态创建新列

R根据列中的uniqe值动态创建新列,r,dataframe,multiple-columns,R,Dataframe,Multiple Columns,我想根据一列中的唯一值动态创建新列。原件: id, category 1, a 2, b 3, c 4, b 新的: 目前我确实: 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(d

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

id, category
1, a
2, b
3, c
4, b
新的:

目前我确实:

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

我们可以应用
table
,将其转换为
data.frame
cbind
,并使用原始数据集

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

您建议的代码无法工作,因为您正在使用
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)
}
我使用:

factor2binary=函数(inputvar)
{

我觉得这已经被问了至少四万五千次了
for(CATEGORY in unique(data$category) {
  data[[CATEGORY]]  = ifelse(data$CATEGORY =="a", 1, 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
      ...