循环通过一个因子的级别并将一个变量与另一个变量进行比较

时间:2015-09-24 11:35:08

标签: r loops character r-factor

我有一个带有一个因子和两个字符串字符列(国籍)的data.frame。该因子有2662个级别,每个级别表示一个团队。团队有多个成员,因此每个级别有~6行。

我想要做的是循环团队的级别并比较成员国籍,并查看该国籍是否存在于其他角色列的任何级别。当有匹配时我想要一个矢量用1标记,当没有匹配时我想要一个变量用2标记。

插图

Team    N1  N2
1      JPN  US
1      US   GER
1      DNK  RUS
2      …    …
2      …    …

理想情况下,我的代码会为美国注册1,为JPN注册2

我已经看过像split,tapply等函数......但我在编写匿名函数时遇到了问题,无法实现我想要的目标:

tapply(Data, TEAM_ID, function () for (i in N1){if (N1 %in% N2) Identifyingvect <= 1} else {Identifyingvect <= 2})

1 个答案:

答案 0 :(得分:1)

这可能可以通过by解决,但我更喜欢data.table来执行此类任务,这些行中的某些内容(btw,tapply是一个聚合函数,因此它赢了在N1中存在欺骗的情况下正确地为每个元素赋值?

library(data.table) 
setDT(Data)[, res := (!N1 %in% N2) + 1L, by = Team]

老实说,我更倾向于保持res合乎逻辑,因为它更直观,更容易操作,但为了将2分配给FALSE匹配而1 1}}到TRUE匹配我必须查找非匹配而不是匹配,然后添加1