![](/img/trans.png)
[英]Error in order(desc(var), by_group = TRUE) : argument lengths differ?
[英]Create tables by_group from list of vectors with inconsist lengths
每個觀察值屬於三組之一; 我們稱它們為“ a”,“ b”和“ c”。
每個觀察都由一個id(整數)向量組成。 許多ID重疊,但許多不重疊。 可以輕松地擁有超過一百萬個唯一值,但是當我將最小頻率設置為10或20左右時,它將很快變得更易於管理。
生成的類似於原始數據的隨機數據:
set.seed(21) #GoSpursGo random_id <- function(n) sample(1111:11111, n, replace = TRUE) ids <- replicate(1000, random_id(sample(200:700, 400))) group <- sample(c("a", "b", "c"), 1000, replace = TRUE) df <- dplyr::data_frame(group = group, ids = ids) df ## Source: local data frame [1,000 x 2] ## ## group ids ## <chr> <list> ## 1 b <int [593]> ## 2 a <int [444]> ## 3 b <int [605]> ## 4 b <int [263]> ## 5 a <int [274]> ## 6 c <int [450]> ## 7 c <int [656]> ## 8 b <int [687]> ## 9 a <int [302]> ## 10 a <int [234]> ## .. ... ...
lapply
和table
函數生成表,但是它們很慢,而且感覺好像缺少了一些明顯的東西。 另外,我已經獲得了足夠多的數據,即使效率的小幅提高也使我的生活變得更加輕松。 我直到最近才開始使用dplyr
[代替基本R函數],效率的提高非常好...但是我在此表上有一個空白[表格]。 dplyr
,所以朝那個方向的反饋會很酷,但是如果是這樣的話,我很樂意考慮研究其他R軟件包。 ## base R
base_tbl <- sapply(unique(df$group), function(x)
table(unlist(df$ids[df$group == x])))
base_tb <- data.frame(
ids = row.names(base_tbl),
base_tbl,
row.names = NULL,
stringsAsFactors = FALSE)
head(base_tb)
## ids b a c
## 1 1111 21 19 16
## 2 1112 17 19 17
## 3 1113 15 16 12
## 4 1114 12 16 17
## 5 1115 10 14 17
## 6 1116 8 23 17
tidyr
有助於重塑這里。 由於您實際上並不關心識別哪個向量,因此首先可以將其unnest
為長unnest
,您可以將其向量化為按兩列分組的count
,這相當於%>% table() %>% as_data_frame()
或%>% group_by(group, ids) %>% summarise(n = n())
,將對group
/ ids
組合的重復觀察折疊到單個行,並添加n
頻率列。 spread
為寬格式使您可以按計數的行總和排序,將最頻繁出現的數字放在頂部:
library(tidyr)
df %>% unnest(ids) %>%
count(group, ids) %>%
spread(group, n) %>%
arrange(desc(rowSums(.[,-1])))
## # A tibble: 10,001 x 4
## ids a b c
## <int> <int> <int> <int>
## 1 10162 22 24 26
## 2 8799 31 22 18
## 3 1173 27 25 18
## 4 2834 21 29 20
## 5 3957 24 27 19
## 6 4940 26 17 27
## 7 7757 23 19 27
## 8 5632 21 20 27
## 9 7565 24 24 20
## 10 10444 24 20 24
## # ... with 9,991 more rows
盡管有45萬行,它仍可在我的計算機上即時有效運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.