R-在rbind之后对数据帧进行排序,并使NA保持有序

R-在rbind之后对数据帧进行排序,并使NA保持有序,r,sorting,rbind,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加入他们,如下所示: > newd

我有两个数据帧。每个都有两列。第一个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
>新数据新数据
富吧
蓝色1克
2布朗一世
3黑F
4粉红色D
5绿色H
6橙色J
7紫色K
8红色C
9 A
10 B
11 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
>newSorted newSorted
富吧
8红色C
4粉红色D
3黑F
蓝色1克
5绿色H
2布朗一世
6橙色J
7紫色K
9 A
10 B
11 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
Foo-Bar
A.
B
红色C
粉红D
E
黑F
蓝色G
绿色H
布朗一世
橙色J
紫色K
如果此帮助请求的格式或样式不正确,请提前接受我的道歉。这是我关于stackoverflow的第一篇文章


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

如果变量是因子,请更改ito字符

 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

newdata[]检查您的列是否为因子。使用字符列,我得到了预期的结果。有了因子变量,我就能重现你得到的结果。因此,将其更改为字符变量。在创建数据帧时使用
stringsAsFactors=FALSE
,并确保条形列是字符而不是因子。NAs影响级别的顺序,为什么不仅仅是
newdata[order(as.character(newdata$Bar)),]
?把一切都变成性格是一种浪费。通过这种方式,
Huddo
可以将变量作为因子保留。非常感谢您的帮助。那很好用。