【发布时间】:2016-03-29 17:58:19
【问题描述】:
我有一个看起来像这个玩具示例的数据框:
Ind ID RegionStart RegionEnd Value TN
1 A 1 100 3 N
1 A 101 200 2 N
2 A 1 100 3 T
2 A 101 200 2 T
3 B 1 100 3 N
3 B 101 200 2 N
4 B 1 100 5 T
4 B 101 200 5 T
我有 4 个人,实际上是 2 对(参考,N,和主题,T)。为简单起见,只有 2 对,并且只有 2 个区域。在我的真实文件中,有 >500 对和 >60,000 个区域。这些区域都具有相同的起点和终点,因此没有重叠。
我想做的是根据ID + region匹配个人,如果
- 该区域的 N 个个体的
Value是 != 3(不等于 3)& -
Value用于该地区的 N-individual 和 T-individual 匹配(例如 N-ind = 2 & T-ind = 2),
然后将 N 和 T 个体中对应的Value 更改为 3。
上面的结果表是:
Ind ID RegionStart RegionEnd Value TN
1 A 1 100 3 N
1 A 101 200 3 N
2 A 1 100 3 T
2 A 101 200 3 T
3 B 1 100 3 N
3 B 101 200 2 N
4 B 1 100 5 T
4 B 101 200 5 T
注意ID=B,区域1-100没有改变Values,因为N的Value = 3;区域 101-200,没有改变,因为 N 和 T 的 Values 不一样。
我想到了使用 dplyr 对匹配项进行分组,例如:
df <- df %>% arrange(ID, Ind, RegionStart, TN) %>% group_by(ID)
或者也许使用data.table,但将ID设置为键?但我仍然不确定如何轻松比较行。我对 dplyr 和 data.table 还是很陌生,所以如果你使用这些命令,对命令的简短解释会很好。不过,请随意使用另一个包。不过数据量很大,所以需要高效。
【问题讨论】:
标签: r