按R中的特定顺序排序数据
假设我有下面的data.frame按R中的特定顺序排序数据,r,sorting,R,Sorting,假设我有下面的data.frame NUM status name 1 + A 2 + A 3 + B 4 - A 5 - A 6 + C 7 - C 8 + A 9 - B 10 - A 我怎么能这样点呢 NUM st
NUM status name
1 + A
2 + A
3 + B
4 - A
5 - A
6 + C
7 - C
8 + A
9 - B
10 - A
我怎么能这样点呢
NUM status name
1 + A
4 - A
2 + A
5 - A
8 + A
10 - A
3 + B
9 - B
6 + C
7 - C
我想先点名订购。然后是身份。但是我需要在这个模式中排序状态;+,-,+-
提前感谢。您可以在base R中执行此操作:
df <- df[with(df,order(status,name)),
][c(nrow(df)/2,0)+rep(1:(nrow(df)/2),each=2),]
# NUM status name
# 1 1 + A
# 4 4 - A
# 2 2 + A
# 5 5 - A
# 8 8 + A
# 10 10 - A
# 3 3 + B
# 9 9 - B
# 6 6 + C
# 7 7 - C
df我们可以使用row\u number
和dplyr
group\u by
创建一个帮助键来实现特定的顺序
df %>%
group_by(name,status) %>%
mutate(Helpkey=row_number()) %>%
arrange(name,Helpkey) %>%
select(-Helpkey)
# A tibble: 10 x 3
# Groups: name, status [6]
NUM status name
<int> <chr> <chr>
1 1 + A
2 4 - A
3 2 + A
4 5 - A
5 8 + A
6 10 - A
7 3 + B
8 9 - B
9 6 + C
10 7 - C
df%>%
分组人(姓名、状态)%>%
变异(Helpkey=row_number())%>%
排列(名称,帮助键)%>%
选择(-Helpkey)
#一个tibble:10x3
#组:名称、状态[6]
NUM状态名
1+A
2 4-A
3.2+A
4.5-A
5.8+A
6 10-A
7 3+B
8 9-B
9.6+C
10 7-C
数据表
方法:
library(data.table)
csv <- "
NUM status name
1 + A
2 + A
3 + B
4 - A
5 - A
6 + C
7 - C
8 + A
9 - B
10 - A
"
data <- fread(csv)
data[, id := seq_len(.N), by = .(name, status)]
data[order(name, id), .(NUM, status, name)]
NUM status name
1: 1 + A
2: 4 - A
3: 2 + A
4: 5 - A
5: 8 + A
6: 10 - A
7: 3 + B
8: 9 - B
9: 6 + C
10: 7 - C
库(data.table)
csv您可以按名称
排序,然后按给定的名称、状态
对出现的次数排序
library(data.table)
setDT(df)
df[order(name, rowid(name, status))]
# NUM status name
# 1: 1 + A
# 2: 4 - A
# 3: 2 + A
# 4: 5 - A
# 5: 8 + A
# 6: 10 - A
# 7: 3 + B
# 8: 9 - B
# 9: 6 + C
# 10: 7 - C
使用的数据:
df <- fread("
NUM status name
1 + A
2 + A
3 + B
4 - A
5 - A
6 + C
7 - C
8 + A
9 - B
10 - A
")
df