问题
I have data something similar to this:
  User id    Ranking   Country 
    1           1         USA 
    2           3         AUS 
    3           1         USA 
    4           1         AUS 
    5           2         USA
and I would like to have the following results:
USA Ranking 1 = 2
USA Ranking 2 = 1
USA Ranking 3 = 0
AUS Ranking 1 = 1
AUS Ranking 2 = 0
AUS Ranking 3 = 1
How may I do this in R please?
回答1:
reshape2::melt(table(d$Country, factor(d$Ranking, 1:3)))
#  Var1 Var2 value
#1  AUS    1     1
#2  USA    1     2
#3  AUS    2     0
#4  USA    2     0
#5  AUS    3     1
#6  USA    3     0
DATA
structure(list(User.id = 1:4, Ranking = c(1L, 3L, 1L, 1L), Country = c("USA", 
"AUS", "USA", "AUS")), class = "data.frame", row.names = c(NA, 
-4L))
回答2:
A dplyr approach. Pretty easy to alter if wanted.
library(dplyr)
df = data.frame(
  UserID = seq(1:5),
  Ranking = c(1, 3, 1, 1, 2),
  Country = c("USA", "AUS", "USA", "AUS", "USA")
)
df_2 <- df %>% 
  group_by(Country, Ranking) %>% 
  summarise(Counts = n())
df_2
  Country Ranking Counts
1 AUS           1      1
2 AUS           3      1
3 USA           1      2
4 USA           2      1
来源:https://stackoverflow.com/questions/58066131/count-how-many-fall-in-each-group-in-r