Pro*_*ion 4 sorting r multiple-columns dataframe
我的数据看起来像这样
a b c
1 1 0
1 2 8
2 1 0
2 2 2
3 1 3
3 2 3
4 1 7
4 2 4
5 1 3
5 2 5
6 1 1
6 2 8
7 1 1
7 2 2
Run Code Online (Sandbox Code Playgroud)
我想对列进行排序a,c以便列中的每个偶数行c都是列a中每对的最大数字.然后我想获取这些值并将它们存储在一个新对象中.看起来应该是这样的.
a c b
1 8 2
2 2 2
3 3 2
4 7 1
5 5 2
6 8 2
7 2 2
Run Code Online (Sandbox Code Playgroud)
你可以使用这种方法:
dat[order(dat$a, dat$c), ][c(FALSE, TRUE), ]
# a b c
# 2 1 2 8
# 4 2 2 2
# 6 3 2 3
# 7 4 1 7
# 10 5 2 5
# 12 6 2 8
# 14 7 2 2
Run Code Online (Sandbox Code Playgroud)
另一种方法dplyr:
library(dplyr)
dat %>%
arrange(a, c) %>%
filter(duplicated(a))
Run Code Online (Sandbox Code Playgroud)
使用data.table包,您可以使用setorder或通过引用对数据进行排序setkey(无需使用<-函数创建副本)
library(data.table)
setorder(setDT(df), a, c)[]
# a b c
# 1: 1 1 0
# 2: 1 2 8
# 3: 2 1 0
# 4: 2 2 2
# 5: 3 1 3
# 6: 3 2 3
# 7: 4 1 7
# 8: 4 2 4
# 9: 5 1 3
# 10: 5 2 5
# 11: 6 1 1
# 12: 6 2 8
# 13: 7 1 1
# 14: 7 2 2
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过各种简单的方式实现目标,例如
df[duplicated(a)]
# a b c
# 1: 1 2 8
# 2: 2 2 2
# 3: 3 2 3
# 4: 4 2 4
# 5: 5 2 5
# 6: 6 2 8
# 7: 7 2 2
Run Code Online (Sandbox Code Playgroud)
或者可能
df[, tail(.SD, 1), a]
# a b c
# 1: 1 2 8
# 2: 2 2 2
# 3: 3 2 3
# 4: 4 2 4
# 5: 5 2 5
# 6: 6 2 8
# 7: 7 2 2
Run Code Online (Sandbox Code Playgroud)
要么
df[, .SD[2], a]
# a b c
# 1: 1 2 8
# 2: 2 2 2
# 3: 3 2 3
# 4: 4 2 4
# 5: 5 2 5
# 6: 6 2 8
# 7: 7 2 2
Run Code Online (Sandbox Code Playgroud)
PS如果要更改列的顺序,也可以使用setcolorder函数通过引用来执行此操作,例如,
setcolorder(df, c("a", "c", "b"))
Run Code Online (Sandbox Code Playgroud)