【问题标题】:How to create a dataframe using values computed from another dataframe in R? [duplicate]如何使用从 R 中的另一个数据帧计算的值创建数据帧? [复制]
【发布时间】:2020-07-16 23:04:16
【问题描述】:

我这周开始使用 R,如果这是一个简单的问题,请原谅。 我想从我之前创建的另一个数据框创建一个数据框。第一个数据框是:

HomeTeam   AwayTeam  Hgoals Agoals  

Parma       Juventus    0    1   
Fiorentina  Napoli      3    4   
Udinese     Milan       1    0   
Cagliari    Brescia     0    1   
Roma        Genoa       3    3   
Sampdoria   Lazio       0    3   
Spal        Atalanta    2    3 
....

现在我想创建一个数据框,显示整个赛季球队主客场进球的平均值。像这样的:

Team        Hgoals(Avg)  Agoals(Avg) 

Parma          2.5          1.4   
Fiorentina     1.3          2.1   
Udinese        1.8          1.4   

【问题讨论】:

  • 这个问题已被多次询问和回答。请搜索答案。
  • 要明确一点:您希望帕尔马的 Hgoals(Avg) 是 Parma 作为主队的所有进球除以比赛次数,而 Parma 的 Agoals(Avg) 是作为客队的进球数?跨度>
  • @NicoMiguel 搜索“如何计算 R 中的组均值”
  • @MartinGal,我的回答的第一部分是您认为想要的吗?我在第二个解释中编辑了更好的标签,以添加与接受的答案相同的结果。
  • @DanielO 我猜,我错了。

标签: r dataframe


【解决方案1】:

我们可以使用:

merge(
  with(df,aggregate(list(Hgoals.Avg = Hgoals),list(Team = HomeTeam), mean)),
  with(df,aggregate(list(Agoals.Avg = Agoals),list(Team = AwayTeam), mean)),
  by="Team",all=T
)

         Team Hgoals.Avg Agoals.Avg
1    Cagliari          0         NA
2  Fiorentina          3         NA
3       Parma          0         NA
4        Roma          3         NA
5   Sampdoria          0         NA
6        Spal          2         NA
7     Udinese          1         NA
8    Atalanta         NA          3
9     Brescia         NA          1
10      Genoa         NA          3
11   Juventus         NA          1
12      Lazio         NA          3
13      Milan         NA          0
14     Napoli         NA          4

如果需要这种替代解释。

with(df,aggregate(list(goals.for.Avg = Hgoals, goals.agaist.Avg = Agoals),list(Team = HomeTeam), mean))

        Team goals.for.Avg  goals.agaist.Avg
1   Cagliari             0                 1
2 Fiorentina             3                 4
3      Parma             0                 1
4       Roma             3                 3
5  Sampdoria             0                 3
6       Spal             2                 3
7    Udinese             1                 0

【讨论】:

  • NA 值将填充完整的数据集。
  • 非常感谢。我确实需要在某一时刻进行第二种解释。
【解决方案2】:

试试这个:

#Data
df <- structure(list(HomeTeam = structure(c(3L, 2L, 7L, 1L, 4L, 5L, 
6L), .Label = c("Cagliari", "Fiorentina", "Parma", "Roma", "Sampdoria", 
"Spal", "Udinese"), class = "factor"), AwayTeam = structure(c(4L, 
7L, 6L, 2L, 3L, 5L, 1L), .Label = c("Atalanta", "Brescia", "Genoa", 
"Juventus", "Lazio", "Milan", "Napoli"), class = "factor"), Hgoals = c(0L, 
3L, 1L, 0L, 3L, 0L, 2L), Agoals = c(1L, 4L, 0L, 1L, 3L, 3L, 3L
)), class = "data.frame", row.names = c(NA, -7L))

df %>% select(-AwayTeam) %>%group_by(HomeTeam) %>% summarise_all(mean,na.rm=T)

# A tibble: 7 x 3
  HomeTeam   Hgoals Agoals
  <fct>       <dbl>  <dbl>
1 Cagliari        0      1
2 Fiorentina      3      4
3 Parma           0      1
4 Roma            3      3
5 Sampdoria       0      3
6 Spal            2      3
7 Udinese         1      0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2021-04-03
    相关资源
    最近更新 更多