根据给定列中值的出现次数重新排列dataframe的行
第一个例子:根据给定列中值的出现次数重新排列dataframe的行,r,R,第一个例子: a <- cbind(1:10, c("a","b","a","b","b","d","a","b", "d", "c")) a [,1] [,2] [1,] "1" "a" [2,] "2" "b" [3,] "3" "a" [4,] "4" "b" [5,] "5" "b" [6,] "6" "d" [7,] "7" "a" [8,] "8" "b" [9,] "9" "d" [10,] "10" "c"
a <- cbind(1:10, c("a","b","a","b","b","d","a","b", "d", "c"))
a
[,1] [,2]
[1,] "1" "a"
[2,] "2" "b"
[3,] "3" "a"
[4,] "4" "b"
[5,] "5" "b"
[6,] "6" "d"
[7,] "7" "a"
[8,] "8" "b"
[9,] "9" "d"
[10,] "10" "c"
我目前正在使用一个非常难看的
来构建
循环,它基本上通过一个排序的计数(a,2)
数据帧,然后重新构建一个新的数据帧。你知道如何更简洁地完成吗?你可以使用ave
和order
使用ave
计算每个“组”的长度,然后对结果排序<如果您关心领带,代码>排名可能也很有用
> a[order(ave(a[, 2], a[, 2], FUN = length), decreasing = TRUE), ]
[,1] [,2]
[1,] "2" "b"
[2,] "4" "b"
[3,] "5" "b"
[4,] "8" "b"
[5,] "1" "a"
[6,] "3" "a"
[7,] "7" "a"
[8,] "6" "d"
[9,] "9" "d"
[10,] "10" "c"
您可以使用
ave
和order
使用ave
计算每个“组”的长度,然后对结果排序<如果您关心领带,代码>排名可能也很有用
> a[order(ave(a[, 2], a[, 2], FUN = length), decreasing = TRUE), ]
[,1] [,2]
[1,] "2" "b"
[2,] "4" "b"
[3,] "5" "b"
[4,] "8" "b"
[5,] "1" "a"
[6,] "3" "a"
[7,] "7" "a"
[8,] "6" "d"
[9,] "9" "d"
[10,] "10" "c"
标题引用了
data.frame
。使用data.table
和dplyr
a1 <- as.data.frame(a)
library(data.table)
ans <- setDT(a1)[,N := .N, by = V2][order(-N)][, N := NULL]
# V1 V2
# 1: 2 b
# 2: 4 b
# 3: 5 b
# 4: 8 b
# 5: 1 a
# 6: 3 a
# 7: 7 a
# 8: 6 d
# 9: 9 d
# 10: 10 c
标题引用了
data.frame
。使用data.table
和dplyr
a1 <- as.data.frame(a)
library(data.table)
ans <- setDT(a1)[,N := .N, by = V2][order(-N)][, N := NULL]
# V1 V2
# 1: 2 b
# 2: 4 b
# 3: 5 b
# 4: 8 b
# 5: 1 a
# 6: 3 a
# 7: 7 a
# 8: 6 d
# 9: 9 d
# 10: 10 c
仅供参考:在本例中,您实际上有一个
矩阵
,而不是data.frame
:-)仅供参考:在本例中,您实际上有一个矩阵
,而不是data.frame
:-)