【问题标题】:R - sort data frame after rbind and keep NA in orderR - 在 rbind 之后对数据帧进行排序并保持 NA 的顺序
【发布时间】:2014-06-28 06:50:53
【问题描述】:

我有两个数据框。每个都有两列。第一个 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 进行分段。这不是我想要达到的。我知道 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 上的第一篇文章。

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

【问题讨论】:

  • 检查您的列是否是因素。使用字符列,我得到了预期的结果。使用因子变量,我能够重现您得到的结果。所以,把它改成字符变量。
  • 在制作数据框时使用stringsAsFactors = FALSE,并确保条形列是字符而不是因子。 NA 影响级别的顺序

标签: r sorting rbind


【解决方案1】:

如果您的变量是因子,请将 i 更改为字符。

 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[order(as.character(newdata$Bar)), ]?把一切都变成角色是一种浪费。
  • 好点。这样Huddo就可以将变量作为因子保留。
  • 非常感谢您的帮助。效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 2014-08-13
  • 2012-06-26
  • 2011-11-19
相关资源
最近更新 更多