Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据给定列中值的出现次数重新排列dataframe的行_R - Fatal编程技术网

根据给定列中值的出现次数重新排列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
:-)