【问题标题】:Sorting the values of column in ascending order in R在R中按升序对列的值进行排序
【发布时间】:2017-12-29 14:15:37
【问题描述】:

下面的脚本是一个四列的数据框。我的需要是我想一次取一对值(a1,a2)。 “a3”列是这样的,如果您检查一对(a1,a2),当您跨越数据时,该对的值按升序排列。如果表中存在该对的副本,我希望“a4”列值的排列方式与特定 (a1,a2) 值的相应“a3”列的升序排列一样。假设第一个 (a1,a2) 对 ("A","D"),该对出现三次,对应的 a3 值按升序排列。同样,我希望根据 a4 值的升序排列 a4 值。请检查预期结果。谢谢,请提出建议。

a1 = c("A","B","C","A","B","C","A","C")
a2 = c("D","E","F","D","E","E","D","F")
a3 = c(5,15,12,10,40,35,20,50)
a4 = c(100,160,66,65,130,150,80,49)
a123= data.frame(a1,a2,a3,a4)
library(dplyr)
a123_r <- a123 %>%
group_by(a1, a2) %>%
mutate(a3 = sort(a3)) %>%
ungroup()
a123_r   

预期输出

a1 = c("A","B","C","A","B","C","A","C")
a2 = c("D","E","F","D","E","E","D","F")
a3 = c(5,15,12,10,40,35,20,50)
a4 = c(65,130,66,80,160,150,100,49)
a123_r <- data.frame(a1,a2,a3,a4)

【问题讨论】:

  • 我知道了,我必须在 a4 列上使用额外的变异,我认为不需要任何进一步的努力,谢谢。
  • @www,我想把a4列按升序排列,为什么要我申请减=真?没有它也可以工作。
  • 我的印象是a4a3 不同,所以你需要一个新问题,但似乎它们遵循相同的规则,所以请忽略我的 cmets。
  • 请仔细检查您的预期输出,我相信a4 应该是a4 = c(65,130,49,80,160,150,100,66)。否则C, F的两行就不会排序了?

标签: r sorting dplyr


【解决方案1】:

为了完整起见,这里是使用data.table的答案:

library(data.table)
cols <- c("a3", "a4")
setDT(a123)[, (cols) := lapply(.SD, sort), by = .(a1, a2), .SDcols = cols][]
   a1 a2 a3  a4
1:  A  D  5  65
2:  B  E 15 130
3:  C  F 12  49
4:  A  D 10  80
5:  B  E 40 160
6:  C  E 35 150
7:  A  D 20 100
8:  C  F 50  66

数据

a1 = c("A","B","C","A","B","C","A","C")
a2 = c("D","E","F","D","E","E","D","F")
a3 = c(5,15,12,10,40,35,20,50)
a4 = c(100,160,66,65,130,150,80,49)
a123= data.frame(a1,a2,a3,a4)

【讨论】:

    猜你喜欢
    • 2019-07-23
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2016-10-18
    • 2012-04-22
    相关资源
    最近更新 更多