【问题标题】:Sorting a matrix by a list in R [duplicate]按R中的列表对矩阵进行排序[重复]
【发布时间】:2018-04-10 16:58:40
【问题描述】:

我想使用 R 对基于列表的矩阵进行排序。但是,对于该列表中的每个元素,有多个行与列表中的单个元素相关。示例如下:

Name    value 
 A        1
 B        2
 B        4
 C        5

l <- c("C", "B", "A")

如果我想将矩阵更改为

Name    value 
 C        5
 B        2
 B        4
 A        1

我该怎么办?

【问题讨论】:

  • 我刚刚将您的 list &lt;- c(C, B, A) 更改为 l &lt;- c("C", "B", "A"),如果这不是您想要的,请编辑问题。顺便说一句,list 不是矢量的好名字,因为它是 R 中的内部函数,所以改为 l
  • 你有矩阵还是数据框?列表还是向量?您还想在每个组中按value 排序吗?请提供一个可重复的示例并更具体,因为没有 list &lt;- c(C, B, A) 这样的东西,并且矩阵不能容纳多种列类型(如您所示)。您可以在您的对象上使用dput 并在此处发布,以便我们进行复制。
  • df[order(match(df$Name,l)),] 来自重复的帖子。
  • 抱歉信息不准确。我想我有一个数据框和一个向量。每个组中的值并不重要。如果需要更多信息,请告诉我。

标签: r


【解决方案1】:

这是data.table的解决方案:

library("data.table")
DT <- fread(
"Name    value 
A        1
B        2
B        4
C        5")
l <- c("C", "B", "A")
DT[l, on="Name"]
# > DT[l, on="Name"]
#    Name value
# 1:    C     5
# 2:    B     2
# 3:    B     4
# 4:    A     1

data.table 在操作期间保留行的顺序。
这是一个以R为基数的变体:

df <- as.data.frame(DT)
merge(data.frame(Name=l), df, sort=FALSE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多