分组后R中的秩函数
如何使用R创建列组列?下面是一个示例分组后R中的秩函数,r,dataframe,rank,R,Dataframe,Rank,如何使用R创建列组列?下面是一个示例 这就是我所拥有的: Date group 12/5/2020 A 12/5/2020 A 11/7/2020 A 11/7/2020 A 11/9/2020 B 11/9/2020 B 10/8/2020 B 这就是我想要的: Date group rank 12/5/2020 A 2 12/5/2020 A 2 11/7/2020 A
这就是我所拥有的:
Date group
12/5/2020 A
12/5/2020 A
11/7/2020 A
11/7/2020 A
11/9/2020 B
11/9/2020 B
10/8/2020 B
这就是我想要的:
Date group rank
12/5/2020 A 2
12/5/2020 A 2
11/7/2020 A 1
11/7/2020 A 1
11/9/2020 B 2
11/9/2020 B 2
10/8/2020 B 1
三角帆
(我在这里使用的是dplyr
,因为我认为很容易看到正在执行的步骤。)
第一种方法可能是利用R的factor
函数,该函数为每个不同的值分配一个整数,因此对该factor
的操作更快(与字符串相比)。也就是说,它获取一个字符串向量(可能是loooong),并将其转换为一个与之相同长的整数向量(更小更快)和一个非常短的字符串向量,其中整数是字符串小向量的索引。这个小向量称为因子的“水平”
库(dplyr)
分组依据(日期,分组)%>%
变异(秩=as.integer(因子(日期)))%>%
解组()
##tibble:7 x 3
#日期组等级
#
#1 2020年12月5日A 2
#2020年12月5日A 2
#3 2020年11月7日A 1
#4 2020年11月7日A 1
#5 2020年11月9日B 2
#6 2020年11月9日B 2
#7 2020年10月8日B 1
这一“分类”有效,但存在两个问题:
Date
列的词典排序,对于该列,此数据样本是可接受的,但这将失败。更好的方法是转换为更适合排序的对象,例如Date
对象
失败排序:
排序(c(“2020年9月12日”、“2020年9月11日”、“2020年9月2日”))
# [1] "11/9/2020" "12/9/2020" "2/9/2020"
dat%>%
变异(日期=as.Date(日期,格式=“%m/%d/%Y”))%>%
分组依据(分组)%>%
变异(秩=as.integer(因子(日期)))%>%
解组()
##tibble:7 x 3
#日期组等级
#
#1 2020-12-05 A 2
#2 2020-12-05 A 2
#3 2020-11-07 A 1
#4 2020-11-07 A 1
#5 2020-11-09 B 2
#6 2020-11-09 B 2
#7 2020-10-08 B 1
及
dplyr::densite_rank
(这是@akrun首先给出的答案…老实说,我一直在构建):dat%>%
变异(日期=as.Date(日期,格式=“%m/%d/%Y”))%>%
分组依据(分组)%>%
变异(等级=密集等级(日期))%>%
解组()
##tibble:7 x 3
#日期组等级
#
#1 2020-12-05 A 2
#2 2020-12-05 A 2
#3 2020-11-07 A 1
#4 2020-11-07 A 1
#5 2020-11-09 B 2
#6 2020-11-09 B 2
#7 2020-10-08 B 1
在将“日期”转换为Date
类后,我们可以使用densite\u-rank
library(dplyr)
library(lubridate)
df1 %>%
group_by(group) %>%
mutate(rank = dense_rank(mdy(Date)))
# A tibble: 7 x 3
# Groups: group [2]
# Date group rank
# <chr> <chr> <int>
#1 12/5/2020 A 2
#2 12/5/2020 A 2
#3 11/7/2020 A 1
#4 11/7/2020 A 1
#5 11/9/2020 B 2
#6 11/9/2020 B 2
#7 10/8/2020 B 1
库(dplyr)
图书馆(lubridate)
df1%>%
分组依据(分组)%>%
突变(秩=密集秩(mdy(日期)))
#一个tibble:7x3
#分组:分组[2]
#日期组等级
#
#1 2020年12月5日A 2
#2020年12月5日A 2
#3 2020年11月7日A 1
#4 2020年11月7日A 1
#5 2020年11月9日B 2
#6 2020年11月9日B 2
#7 2020年10月8日B 1
数据
df1将日期
列转换为实际日期对象,按日期
排列
数据,并使用匹配
和唯一
获得排名
列
library(dplyr)
df %>%
mutate(Date = lubridate::mdy(Date)) %>%
arrange(group, Date) %>%
group_by(group) %>%
mutate(rank = match(Date, unique(Date)))
# Date group rank
# <date> <chr> <int>
#1 2020-11-07 A 1
#2 2020-11-07 A 1
#3 2020-12-05 A 2
#4 2020-12-05 A 2
#5 2020-10-08 B 1
#6 2020-11-09 B 2
#7 2020-11-09 B 2
库(dplyr)
df%>%
突变(日期=润滑::mdy(日期))%>%
安排(组、日期)%>%
分组依据(分组)%>%
变异(等级=匹配(日期,唯一(日期)))
#日期组等级
#
#1 2020-11-07 A 1
#2 2020-11-07 A 1
#3 2020-12-05 A 2
#4 2020-12-05 A 2
#5 2020-10-08 B 1
#6 2020-11-09 B 2
#7 2020-11-09 B 2
数据
df <- structure(list(Date = c("12/5/2020", "12/5/2020", "11/7/2020",
"11/7/2020", "11/9/2020", "11/9/2020", "10/8/2020"), group = c("A",
"A", "A", "A", "B", "B", "B")), class = "data.frame", row.names = c(NA, -7L))
df-Hi-Yusha。欢迎来到堆栈溢出。你能告诉我们为什么队伍是这样排列的吗?你的例子不太清楚。我的失败是没有先写最后的答案*耸耸肩*
df <- structure(list(Date = c("12/5/2020", "12/5/2020", "11/7/2020",
"11/7/2020", "11/9/2020", "11/9/2020", "10/8/2020"), group = c("A",
"A", "A", "A", "B", "B", "B")), class = "data.frame", row.names = c(NA, -7L))