簡單data.frame
與character
列:R:計數在每列的類別時,並不是所有的類別出現
df <- data.frame(x = c("a", "b", "c", "c"), y = c("a", "b", "b", "c"))
假設我希望在每列數的類別,快,返回另一個data.frame
。下面使用map
從purrr
優雅的作品:
df %>%
map(table) %>%
Reduce(cbind, .) %>%
data.frame() %>%
set_names(c("x", "y"))
x y
a 1 1
b 1 2
c 2 1
但是。如果不是所有類別都出現在每一列中,該怎麼辦?例如:
我想在y
列b
計數是0
。但我得到:
df2 %>%
map(table) %>%
Reduce(cbind, .) %>%
data.frame() %>%
set_names(c("x", "y"))
x y
a 1 3
b 2 3
甚至沒有警告!我猜這是因爲cbind
的一列再循環元素的匹配程度與另一列的長度相匹配。我試着用qpcR:::cbind.na
至少獲得失蹤的類別,我以後可以轉換爲0
NA
值,但我得到這個錯誤:
Error in matrix(, maxRow - nrow(x), ncol(x)) :
invalid 'ncol' value (too large or NA)
什麼是偉大的,快速的解決方案,最好是從tidyverse
組包?
UPDATE:
對於那些我們所知道的所有類別的第一種情況是所有列:
df %>% dmap(function(x) as.numeric(table(x)))
可能是更優雅。
在基R,下面的工作。 'sapply(df2,function(i)table(factor(i,levels = levels(unlist(df2)))))'。 'factor'用於包含所有可用的級別,它包含在'levels(unlist(df2))'中。 – lmo