如何将超过2个向量的变量转换为虚拟变量?

时间:2017-04-08 20:38:51

标签: r

现在我正在尝试从具有两个以上向量的变量中创建数据集中的新虚拟变量。更具体地说,我的数据集有一个“状态”变量,我想做一个虚拟,其中1 =北方的状态,0 =所有其他状态。这是数据集的一部分(它是一个非常大的集合,因此我只包含基本数据):

  Year     StateICP  
1 1940        71     
2 1940        21     
3 1940        22     
4 1940        32     
5 1940        18     
6 1940        22  
7 1940        45     
8 1940        40     
9 1940        33     

所以我想要做的是创建一个新的列(称为“North”),如果StateICP = 21,22,40或45,则新变量将= 1,否则将为0.我说,这是一个非常大的数据集(超过1000000次观察),所以我无法手动逐行输入。我尝试了一个ifelse函数,但这只给了我错误。

我确信这不是那么复杂,但我对R来说相当新。我知道如何正常创建一个虚拟变量,但是我被困在这里。任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:2)

因此,创建简单的数据集来复制上面的内容:

df <- data.frame(Year = rep(1940,500), StateICP = sample(1:100, 500, TRUE))

这将创建一个data.frame,其中包含您描述的列和500条记录。 StateICP值是随机生成的1到100之间的整数。如果我们想编码布尔值,我们可以简单地添加一个新列:

df$boolean <- df$StateICP %in% c(21, 22, 40, 45)

如果我们想要将它们专门编码为0,1如您所述,那么您可以使用ifelse:

df$dummy <- ifelse(df$StateICP %in% c(21, 22, 40, 45), 1, 0)

您必须确保在ifelse中使用向量(因为它不接受数据参数)。