【问题标题】:Create a matrix from a dataframe and fill it with the count of a column according to rows从数据框创建一个矩阵,并根据行数填充它
【发布时间】:2020-07-08 16:40:55
【问题描述】:

假设我有以下数据框:

df <- data.frame(teams=c("A", "A", "C", "C", "D", "D"), 
             country=c("Italy","Italy","Italy","Italy", "India","India"),
             players=c("ac","bd","fg","ji","ki","yr"), 
             stringsAsFactors = FALSE)

我想创建一个矩阵如下:

基本上,“球队”和“国家”应该分别是矩阵的行和列,值应该是球员姓名的计数。

谁能告诉我如何在 R 中做到这一点?

谢谢

【问题讨论】:

    标签: r dataframe matrix count


    【解决方案1】:

    使用 dplyr 和 tidyr:

    library(dplyr)
    library(tidyr)
    
    df %>% 
      count(teams, country) %>% 
      pivot_wider(names_from = country, 
                  values_from = n, 
                  values_fill = list(n = 0))
    
    # A tibble: 3 x 3
      teams Italy India
      <chr> <int> <int>
    1 A         2     0
    2 C         2     0
    3 D         0     2
    

    【讨论】:

    • 感谢您的回复。但是我收到一个错误“计数错误(。,团队,国家):找不到对象'团队'”。我不确定为什么会出现这样的错误。
    • 我不确定,除非您正在处理与上面提供的数据框不同的数据框。
    【解决方案2】:
    as.matrix(table(df$teams, df$country))
      #   India Italy
      # A     0     2
      # C     0     2
      # D     2     0
    
    # If order matters
    df$country <- factor(df$country, levels=c("Italy", "India"))
    as.matrix(table(df$teams, df$country))
      #   Italy India
      # A     2     0
      # C     2     0
      # D     0     2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 2018-09-03
      • 1970-01-01
      • 2021-10-02
      • 2013-03-30
      • 1970-01-01
      • 2021-12-19
      相关资源
      最近更新 更多