如何从现有数值列中生成R中的二进制列?

时间:2016-02-03 15:45:17

标签: r

以下是一些示例数据:

Age       Parent
0             4
2             4
5             3
8             3
10            4
15            2
18            2
19            0

数据代表男性和女性父母在鸟巢的出勤率。这里,4 =父母双方都存在,3 =仅存在男性,2 =仅存在女性,0 =父母双方都不存在。

我想生成一个新列(最好是除原始父列而不是替换它)给出二进制数据,其中3和4成为' 1'和2和0成为' 0'。

因此,我的示例数据将提供以下二进制列:

Age   Parent
0             1
2             1
5             1
8             1
10            1
15            0
18            0
19            0

我希望我已经提供了足够的信息,但请询问您是否需要一些额外的细节。

2 个答案:

答案 0 :(得分:1)

您可以这样做:

df$parentNew <- ifelse(df$Parent %in% c(3, 4), 1, 0)
df
  Age Parent parentNew
1   0      4         1
2   2      4         1
3   5      3         1
4   8      3         1
5  10      4         1
6  15      2         0
7  18      2         0
8  19      0         0

答案 1 :(得分:1)

与大多数R问题一样,有几种不同的方法可以做到这一点,但最简单的可能是(让我们说你已经将数据存储在一个数据框中{{1 }}):

d

当然,在上面的代码中可以使用任意数量的逻辑向量代替d$Father <- ifelse(d$Parent >= 3, 1, 0)

您还可以直接利用R同等对待d$Parent >= 31的事实:

TRUE

这两个结果向量都适用于大多数R应用程序。

对于更复杂的案例处理,d$Dad <- d$Parent %in% c(3,4) d$Dad_Num <- as.numeric(d$Dad <- d$Parent %in% c(3,4)) 包提供了memisc函数(虽然语法需要一些时间来习惯):

cases

这在您的情况下是过度的,但可能有助于了解将来。