麻烦将两个数字列合并为一个R.

时间:2015-03-20 18:44:47

标签: r dataframe

所以我有点麻烦将两列合二为一。我有两列年龄,分为儿童和青少年专栏。例如:

child adolescent
1   NA  12
2   NA  15
3   NA  12
4   NA  12
5   NA  13
6   NA  13
7   NA  13
8   NA  14
9   14  15
10  NA  12
11  12  13
12  NA  12
13  NA  13
14  NA  14
15  NA  14
16  12  13
17  NA  14
18  NA  13
19  NA  13
20  NA  14
21  NA  12
22  NA  13
23  12  15
24  NA  13
25  NA  15
26  NA  12
27  NA  15
28  NA  15
29  NA  13
30  NA  12
31  13  15`

现在我想做的是将它们组合成一个名为" age"并删除所有na值。但是当我尝试以下代码时,遇到了一个问题:

age<- c(na.omit(data$child),na.omit(data$adolescent))

问题在于我的原始数据有514行,但当我将两列合并后删除时,我最终会得到543个值,而不是514,我不知道为什么。

所以,如果可能的话,有人可能会首先解释为什么我获得的价值超出了我的计划,其次可能是将这两列合并的更好方法。

编辑:我正在寻找类似的东西

   age
1   12
2   15
3   12
4   12
5   13
6   13
7   13
8   14
9   14
10  12
11  12
12  12
13  13
14  14
15  14
16  12
17  14
18  13
19  13
20  14
21  12
22  13
23  12
24  13
25  15
26  12
27  15
28  15
29  13
30  12
31  13
32  14
33  13
34  11
35  15
36  13

提前致谢

3 个答案:

答案 0 :(得分:2)

这一行:

age<- c(na.omit(data$child),na.omit(data$adolescent))

child字段中的所有非缺失值连接到adolescent字段中的所有非缺失值。我怀疑你想使用其中一种解决方案

# youngest age
age<- pmin(data$child,data$adolescent,na.rm=T)

# oldest age
age<- pmax(data$child,data$adolescent,na.rm=T)

# child age, replaced with adolescent if missing
age<- data$child
age[is.na(age)] <- data$adolescent[is.na(age)]
#       ^   notice same logical index   ^
#       |_______________________________|

答案 1 :(得分:2)

您的代码适用于示例数据,但您可以尝试:

age <- c(data$child, data$adolescent)
age <- age[!is.na(age)]

这将数据框中的两列组合成一个向量,并删除所有NA元素。

答案 2 :(得分:2)

df$age <-  ifelse( !(is.na(df$child)), df$child , df$adolescent)