我有一個這樣的資料框:
df = data.frame(col1=c(1,1,1,2,2,2,3,3,3),
col2=as.factor(c('a','b','b','a','a','a','b','a','b')))
然后我提取與每一列相關的所有類別(級別):
levels_df = expand.grid(unique(df$col1), unique(df$col2))
colnames(levels_df)=c('col1','col2')
我現在的目標是為屬于每對級別的行執行一個函式。我怎樣才能做到這一點?
sapply(levels, FUN, dataset=df)
接受任何其他執行相同任務的策略。函式操作可以是任何你喜歡的,例如計數函式(每對級別有多少行),在這種情況下,輸出將具有以下方面:
總之,我想使用每對級別從資料幀中提取行,因此我可以操縱這些行來執行一個功能(例如 nrows() )
uj5u.com熱心網友回復:
您可以跳過級別部分,只需使用 dplyr 按 col1 和 col2 分組,然后計算行數。最后,我們使用 complete 添加未出現在我們的資料集中的任何組合:
library(tidyverse)
df %>%
group_by(col1, col2) %>% # group df by col1 and col2
summarise(n = n()) %>% # make a new column, n, which is the count
complete(col1, col2, fill=list(n=0)) # Fill in missing pairs with 0
輸出符合您的預期:
# A tibble: 6 x 3
# Groups: col1 [3]
col1 col2 n
<dbl> <fct> <dbl>
1 1 a 1
2 1 b 2
3 2 a 3
4 2 b 0
5 3 a 1
6 3 b 2
uj5u.com熱心網友回復:
我不確定這個具體的計數示例是否會對您有所幫助,但您可以在 tidyverse 中執行以下操作:
library(tidyverse)
df %>%
group_by(col1, col2) %>%
count() %>%
ungroup() %>%
complete(col1, col2, fill = list(n = 0))
這使:
# A tibble: 6 x 3
col1 col2 n
<dbl> <fct> <dbl>
1 1 a 1
2 1 b 2
3 2 a 3
4 2 b 0
5 3 a 1
6 3 b 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/409087.html
標籤:
上一篇:為什么在Python中掃描字串文字時出現SyntaxError:EOL?
下一篇:值大于當前行數的條件計數
