r - 根据现有列和分组在 R 数据框中创建新列

标签 r data-manipulation

我有一个包含这些初始值的足球队信息数据框 df (MATCHID)

 TEAMID Venue LEAGUEPOS MATCHID
 WHU     A         5       1
 COV     H        12       1
 EVE     H        15       2
 MNU     A         2       2
 ARS     A         3       3
 LEI     H         4       3

我希望为每个游戏只创建一行,这样它最终看起来像

MATCHID HomeTeam AwayTeam HomePos AwayPos
   1       COV      WHU     12      5      etc.

所以我想创建一些新列,删除其他列并删除重复的行。

我在第一阶段尝试时遇到了问题

df$HomeTeam <- df$TEAMID[df$Venue == "H"]

因为这会产生

 TEAMID Venue LEAGUEPOS MATCHID HomeTeam
   WHU     A         5       1      COV
   COV     H        12       1      EVE
   EVE     H        15       2      LEI
   MNU     A         2       2      STH
   ARS     A         3       3      TOT
   LEI     H         4       3      WIM

HomeTeam 仅显示 Venue = H 的每条记录的顺序 TEAMID

最佳答案

这可以使用作为基础 R 的一部分的函数 reshape 轻松实现。

# READ DATA
mydf = read.table(textConnection("
TEAMID Venue LEAGUEPOS MATCHID
 WHU     A         5       1
 COV     H        12       1
 EVE     H        15       2
 MNU     A         2       2
 ARS     A         3       3
 LEI     H         4       3"), 
 sep = "", header = T, colClasses = rep('character', 4))

# RESHAPE DATA
reshape(mydf, idvar = 'MATCHID', timevar = 'Venue', direction = 'wide')

这是生成的输出

  MATCHID TEAMID.A LEAGUEPOS.A TEAMID.H LEAGUEPOS.H
1       1      WHU           5      COV          12
3       2      MNU           2      EVE          15
5       3      ARS           3      LEI           4

注意:另一种方法是使用 reshape 包中的 castmelt 函数。

require(reshape)
mydf_m = melt(mydf, id = c('MATCHID', 'Venue'))
cast(mydf_m, MATCHID ~ Venue + variable)

关于r - 根据现有列和分组在 R 数据框中创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6930342/

相关文章:

r - 删除不完全重复的冗余记录

python - 根据分隔符垂直拆分 DataFrame

python - 每 14 行 python 更改信息

r - 在 R 中获得图边距

r - ggplot2 中 "stat_summary = mean_cl_boot"的解释?

r - ggplot geom_histogram 颜色按因素无法正常工作

r - 防止导航栏在flexdashboard R中重叠内容

r - 计算多个数据框之间匹配的列数

data-manipulation - 在 OpenRefine 中合并列 x 到 n

r - R的plot()的默认字体是什么?