【发布时间】:2016-12-30 06:12:16
【问题描述】:
我有一个大数据框,如下所示:
> my_table
track_fid start_gid end_gid
1 1 100 82
2 2 82 100
3 3 100 82
4 4 100 32
5 5 82 100
6 6 82 100
7 7 82 100
8 8 100 82
9 9 34 100
10 10 31 100
我的目标是在末尾添加列 to_from 并用字符 y 或 n 填充它。
我们以第一行为例——start_gid 中的值 = 100,end_gid 中的值 = 82。如果表中的任何其他行存在值相反的位置,即end_gid = 100 和start_gid = 82 中的值,我想用y 填充两行的to_from 列。如果逆不存在,则第一行应用 n 填充。这里的关键是遍历每一行并按照track_fid的顺序在表中搜索它的逆。如果在track_fid 更大的位置找到逆,则应插入y。一旦一个逆接收到一个值y,它就不能再次使用。
例如,这将是一个示例输出:
> output
track_fid start_gid end_gid to_from
1 1 100 82 y
2 2 82 100 y
3 3 100 82 y
4 4 100 32 n
5 5 82 100 y
6 6 82 100 y
7 7 82 100 n
8 8 100 82 y
9 9 34 100 n
10 10 31 100 n
有没有办法在 R 中创建这样的输出?
类似的东西:
for(i in 2:nrow(my_table)) {
if(my_table[i-1,"start_gid"]= my_table[i,"end_gid"]) {
my_table$to_from = "y" } else { my_table$to_from = "n"}
> str(output)
'data.frame': 10 obs. of 4 variables:
$ track_fid: int 1 2 3 4 5 6 7 8 9 10
$ start_gid: int 100 82 100 100 82 82 82 100 34 31
$ end_gid : int 82 100 82 32 100 100 100 82 100 100
$ to_from : Factor w/ 2 levels "n","y": 2 2 2 1 2 2 1 2 1 1
【问题讨论】:
-
创建
sum、prod和group_by()有助于更进一步 -
提供的“正确答案似乎有缺陷。有偶数 (82,100) 对。请更正示例或优化问题。
-
@42- 不,这个例子很好。第 7 行没有匹配项。
-
没错,输出是正确的。操作的顺序是问题 - 通过升序
track_fid是问题。