如何使用共享的第三列从最低到最高对第四列中的 id 组合进行排名?
How to rank in a fourth column a combination of ids using a shared third column from lowest to highest?
编辑:使用如下所示的勾选答案的修改版本
data1 <- data %>% group_by(pitch_2) %>% mutate(rank = order(euclid_dist))
原创----
我的数据框中有一对来自我的时间范围(超过 8000 万)的所有可能的音高组合——在 pitch_1 下是一个 ID,在 pitch_2 下是另一个 ID 和第三列euclid_dist 衡量一个音高与另一个音高的接近程度——我想在我的数据框中创建第四列,我在其中按最低数字(最佳匹配)到最高数字对组合进行排名。
我希望相对于 pitch_2 中具有相同主音高的其他组合进行排名。因此,与与相同 pitch_2 进行比较的所有其他 pitch_1 相比,他们将 pitch_1 下的音高排在第一位。
这只是我的数据的概览
> head(data)
pitch_1 pitch_2 euclid_dist
2 400010-FF 493247-SI 3.631515
3 493247-SL 493247-SI 3.125729
4 349193-FT 493247-SI 4.619143
5 150037-FF 493247-SI 4.137001
6 218596-FF 493247-SI 2.536352
7 218596-SI 493247-SI 1.438356
使用那个小子集上的排名,我得到了我想要的数据,但不知道如何将它扩展到我的大数据框,其中有 pitch_2 个 [=14] =]
data$rank <- rank(data$euclid_dist)
我希望它看起来像什么(有一些您看不到的行填充了其他行列)
pitch_1 pitch_2 euclid_dist rank
2 400010-FF 493247-SI 3.631515 7
3 493247-SL 493247-SI 3.125729 6
4 349193-FT 493247-SI 4.619143 10
5 150037-FF 493247-SI 4.137001 8
6 218596-FF 493247-SI 2.536352 4
7 218596-SI 493247-SI 1.438356 1
使用 dplyr
s 变异 + 顺序:
df <- data_frame(x = c(100, 300, 400, 50, 20, 600))
df <- df %>% mutate(xx = order(x))
你可以这样做-
> library(data.table)
> setDT(dt)[,rank:=rank(euclid_dist)]
输出-
> dt
pitch_1 pitch_2 euclid_dist rank
1: 400010-FF 493247-SI 3.631515 4
2: 493247-SL 493247-SI 3.125729 3
3: 349193-FT 493247-SI 4.619143 6
4: 150037-FF 493247-SI 4.137001 5
5: 218596-FF 493247-SI 2.536352 2
6: 218596-SI 493247-SI 1.438356 1
输入-
dt <- read.table(text=' pitch_1 pitch_2 euclid_dist
2 400010-FF 493247-SI 3.631515
3 493247-SL 493247-SI 3.125729
4 349193-FT 493247-SI 4.619143
5 150037-FF 493247-SI 4.137001
6 218596-FF 493247-SI 2.536352
7 218596-SI 493247-SI 1.438356',header=T)
编辑:使用如下所示的勾选答案的修改版本
data1 <- data %>% group_by(pitch_2) %>% mutate(rank = order(euclid_dist))
原创----
我的数据框中有一对来自我的时间范围(超过 8000 万)的所有可能的音高组合——在 pitch_1 下是一个 ID,在 pitch_2 下是另一个 ID 和第三列euclid_dist 衡量一个音高与另一个音高的接近程度——我想在我的数据框中创建第四列,我在其中按最低数字(最佳匹配)到最高数字对组合进行排名。
我希望相对于 pitch_2 中具有相同主音高的其他组合进行排名。因此,与与相同 pitch_2 进行比较的所有其他 pitch_1 相比,他们将 pitch_1 下的音高排在第一位。
这只是我的数据的概览
> head(data)
pitch_1 pitch_2 euclid_dist
2 400010-FF 493247-SI 3.631515
3 493247-SL 493247-SI 3.125729
4 349193-FT 493247-SI 4.619143
5 150037-FF 493247-SI 4.137001
6 218596-FF 493247-SI 2.536352
7 218596-SI 493247-SI 1.438356
使用那个小子集上的排名,我得到了我想要的数据,但不知道如何将它扩展到我的大数据框,其中有 pitch_2 个 [=14] =]
data$rank <- rank(data$euclid_dist)
我希望它看起来像什么(有一些您看不到的行填充了其他行列)
pitch_1 pitch_2 euclid_dist rank
2 400010-FF 493247-SI 3.631515 7
3 493247-SL 493247-SI 3.125729 6
4 349193-FT 493247-SI 4.619143 10
5 150037-FF 493247-SI 4.137001 8
6 218596-FF 493247-SI 2.536352 4
7 218596-SI 493247-SI 1.438356 1
使用 dplyr
s 变异 + 顺序:
df <- data_frame(x = c(100, 300, 400, 50, 20, 600))
df <- df %>% mutate(xx = order(x))
你可以这样做-
> library(data.table)
> setDT(dt)[,rank:=rank(euclid_dist)]
输出-
> dt
pitch_1 pitch_2 euclid_dist rank
1: 400010-FF 493247-SI 3.631515 4
2: 493247-SL 493247-SI 3.125729 3
3: 349193-FT 493247-SI 4.619143 6
4: 150037-FF 493247-SI 4.137001 5
5: 218596-FF 493247-SI 2.536352 2
6: 218596-SI 493247-SI 1.438356 1
输入-
dt <- read.table(text=' pitch_1 pitch_2 euclid_dist
2 400010-FF 493247-SI 3.631515
3 493247-SL 493247-SI 3.125729
4 349193-FT 493247-SI 4.619143
5 150037-FF 493247-SI 4.137001
6 218596-FF 493247-SI 2.536352
7 218596-SI 493247-SI 1.438356',header=T)