1

我有两个数据框。每个都有两列。第一个 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

现在我使用第二列上的 order 对该 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 进行分段。这不是我想要达到的。我知道 order 接受 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 上的第一篇文章。

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

4

1 回答 1

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
于 2014-06-28T07:07:04.830 回答