【问题标题】:Construct a vector of names from data frame using R使用 R 从数据框中构造名称向量
【发布时间】:2016-10-13 01:42:41
【问题描述】:

我有一个大数据框,其中包含有关体育比赛结果的数据。我想尝试根据某些标准从数据框中提取特定数据。这是我的意思的一个简单例子...... 想象一下,我有一个数据框 df,它在每一行上显示有关锦标赛的特定足球比赛的数据,如下所示:

   Winner_Teams Win_Capt_Nm Win_Country Loser_teams Lose_Capt_Nm Lose_Country
1      Man utd        John     England   Barcalona       Carlos        Spain
2    Liverpool       Steve     England    Juventus        Mario        Italy
3      Man utd        John    Scotland    R Madrid         Juan        Spain
4     Paris SG      Teirey      France     Chelsea         Mark      England

因此,例如,在第 [1] 行中,曼联战胜了巴萨,曼联队长的名字是约翰,他来自英格兰。 Barcalona(比赛的失败者)队长的名字是Carlos,他来自西班牙。

我想用锦标赛中所有英国玩家的名字构造一个向量,输出应该是这样的:

[1] "John"  "Mark"  "Steve"

到目前为止,这是我尝试过的... 我的第一步是创建一个数据框,丢弃所有没有英国队长的比赛

> England_player <- data.frame(filter(df, Win_Country=="England" ))
> England_player

 Winner_Teams Win_Capt_Nm Win_Country Loser_teams Lose_Capt_Nm Lose_Country
1      Man utd        John     England   Barcalona       Carlos        Spain
2    Liverpool       Steve     England    Juventus        Mario        Italy
3     Paris SG      Teirey      France     Chelsea         MArk      England

然后我在 England_player 上使用 select() 来隔离名称:

> England_player_names <- select(England_player, Win_Capt_Nm, Lose_Capt_Nm)
> England_player_names

  Win_Capt_Nm Lose_Capt_Nm
1        John       Carlos
2       Steve        Mario
3      Teirey         Mark

然后我就卡住了!如您所见,输出显示了英文获胜者的名字和他的对手的名字......这不是我想要的! 从这个数据框中读取名称很容易..但是我正在使用的数据框很大,所以仅仅读取这些值是不好的! 关于我将如何做到这一点的任何建议?

【问题讨论】:

  • 似乎您需要组合两个子集-Win_Capt_NmWin_Country 是英格兰时,Lose_Cpt_NmLose_Country 是英格兰时。分别拉取每个向量,使用c()组合它们。
  • 这是一个很好的问题,但请记住在使用 R 标签时通过dput() 分享您的数据。将指针悬停在r 标签上以了解更多信息。
  • 我认为你需要制作两个子集:首先你在 win country = england 上设置子集并获取球员姓名。然后你在失去国家=英格兰的子集上做同样的事情。最后,您通过 rbind 将两个列表放在一起。然而,这可能会导致重复,yoi 可以使用 'uniq' 将其删除

标签: r vector


【解决方案1】:
english.players <- union(data$Win_Capt_Nm[data$Win_Country == 'England'], data$Lose_Capt_Nm[data$Lose_Country == 'England'])

[1] "John"  "Steve" "Mark" 

【讨论】:

  • 这太完美了!我刚刚发现了 union() 命令,我已经很喜欢它了!谢谢!
  • 请注意,使用union 将删除所有重复的名称。要保留重复,请使用 c() 而不是 union()
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 2019-04-06
  • 2017-12-10
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 2019-08-14
  • 2017-01-22
相关资源
最近更新 更多