这是我正在处理的数据框的示例:
id string
1 no
1 yes
1 yes
2 no
2 yes
3 yes
3 yes
3 no
我想提取id
为此最后两行包含字符串"yes"
对于列string
.
所以结果是:
id string
1 yes
1 yes
我只会拥有一个id
这将是1
.
我尝试使用 for 循环执行此操作,但由于我有超过 200 000 行,因此循环花费了太多时间:超过5分钟.
我试过这个:
vec_id <- unique(df$id)
for(id in vec_id){
if( tail(df[which(df$id == id),"string"])[1] & tail(df[which(df$id == id),"string"])[2] ){
vec_id <- append(vec_id, id)
}
有什么功能或方法可以更快地完成这项任务吗?
我们可以用data.table
。将“data.frame”转换为“data.table”(setDT(df1)
),按“id”分组,if
all
最后两个观察中的“字符串”是“是”,然后获取最后两个“字符串”(使用tail
).
library(data.table)
setDT(df1)[, if(all(tail(string,2)=="yes")) .(string = tail(string,2)) , id]
# id string
#1: 1 yes
#2: 1 yes
注意:data.table 语法通常是data.table[i, j, by]
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)