【发布时间】:2019-01-07 16:27:15
【问题描述】:
我有一个data.frame,有 2291 行和 4 列,我想选择那些第 3 列与下一行的第 2 列匹配的行,然后从下一个匹配的行重新开始,直到匹配继续直到它停止。
我尝试使用来自1:nrow(df) 的for 循环,但这并不完全准确,因为i(我认为)并没有真正从匹配行的点开始。
我现在的代码是这样的:
test <- NULL
x <- c()
y <- c()
for(i in 1:nrow(df)){
if(df[i,3]==df[i+1,2]){
x <- df[i,]
y <- df[i+1,]
i = i+1 #stuck at this
}
test <- rbind(test,x,y)
}
示例数据如下所示:
X 2670000 3750000 C
X 3830000 8680000 E3
X 8680000 10120000 E1-A
X 10120000 11130079 D
X 11170079 11810079 E3
X 11810079 12810079 E2-A
X 12810079 13530079 E3
X 13530079 14050079 E3
X 14050079 15330079 A
X 15330079 16810079 E2-A
X 16810079 17690079 E2-A
我想要的是:
X 3830000 8680000 E3
X 8680000 10120000 E1-A
X 10120000 11130079 D
X 11170079 11810079 E3
X 11810079 12810079 E2-A
X 12810079 13530079 E3
X 13530079 14050079 E3
X 14050079 15330079 A
X 15330079 16810079 E2-A
X 16810079 17690079 E2-A
我实际上对第 4 列的值感兴趣。在这种情况下,当
df[i,3] 不等于 df[i+1,2],是否可以更新代码以将第 4 列值存储在向量中?
例如:这个样本的结果是:
vector_1
"E3" "E1-A" "D"
vector_2
"E3" "E2-A" "E3" "E3" "A" "E2-A" "E2-A"
到目前为止我得到的是:
X 3830000 8680000 E3
X 8680000 10120000 E1-A
X 8680000 10120000 E1-A
X 10120000 11130079 D
X 8680000 10120000 E1-A
X 10120000 11130079 D
X 11170079 11810079 E3
X 11810079 12810079 E2-A
X 11810079 12810079 E2-A
X 12810079 13530079 E3
如果我从 df 的第 1 行转到最后一行,只要i 的第 3 列与i+1 的第 2 列匹配,我就想继续在向量中添加第 4 列的值。一旦该条件中断,下次满足相同条件时,我想再次继续存储第 4 列的值。
谢谢!
【问题讨论】:
-
您希望始终包含最后一行?如果
i == nrow(df)则有df[i+1, 3]...