R - 在rbind之后排序数据帧并按顺序保持NA

时间:2014-06-28 06:50:53

标签: r sorting rbind

我有两个数据框。每个都有两列。第一个df没有NA值,第二个df在第一列中有NA值。例如:

> myA
     Foo Bar
1   blue   G
2  brown   I
3  black   F
4   pink   D
5  green   H
6 orange   J
7 purple   K
8    red   C
> myB
  Foo Bar
1  NA   A
2  NA   B
3  NA   E

我使用rbind加入他们,如下所示:

> newdata <- rbind(myA, myB)
> newdata
      Foo Bar
1    blue   G
2   brown   I
3   black   F
4    pink   D
5   green   H
6  orange   J
7  purple   K
8     red   C
9    <NA>   A
10   <NA>   B
11   <NA>   E

现在我使用第二列的顺序对df进行排序并得到:

> newSorted <- newdata[order(newdata$Bar),]
> newSorted
      Foo Bar
8     red   C
4    pink   D
3   black   F
1    blue   G
5   green   H
2   brown   I
6  orange   J
7  purple   K
9    <NA>   A
10   <NA>   B
11   <NA>   E

它似乎已经完成了对第二列上的每个原始df进行排序并对新df进行分段。那不是我想要达到的目标。我知道命令接受na.last的参数,但NA值在第一列,而我要求它在第二列上排序。我想得到:

Foo      Bar
<NA>     A
<NA>     B
red      C
pink     D
<NA>     E
black    F
blue     G
green    H
brown    I
orange   J
purple   K

如果此帮助请求格式正确或样式不正确,请提前接受我的道歉。这是我在stackoverflow上的第一篇文章。

有关我可能缺少什么或如何做到这一点的任何建议?

1 个答案:

答案 0 :(得分:2)

如果您的变量是因素,请更改字符。

 newdata[] <- lapply(newdata, as.character)
 newdata[order(newdata$Bar),]
        Foo Bar
  11   <NA>   A
  21   <NA>   B
  8     red   C
  4    pink   D
  31   <NA>   E
  3   black   F
  1    blue   G
  5   green   H
  2   brown   I
  6  orange   J
  7  purple   K