R 如果值在同一列和同一数据帧的窗口范围内,则创建新列
我有一个数据帧R 如果值在同一列和同一数据帧的窗口范围内,则创建新列,r,R,我有一个数据帧tmp tmp我不太确定你的情况应该是什么。如果您需要一个索引(exist3)来指示您的POS在其周围是exist1=1还是+/-3,那么这应该可以: tmp$exist3 <- apply(tmp, 1, function(x) ifelse(x[3]==1 | x[2]%in%c(sapply(c(tmp$POS[tmp$exist]), function(y) y + seq(-3,3))), 3, 0)) tmp$exist3首先按POS对数据排序,并确定POS-l
tmp
tmp我不太确定你的情况应该是什么。如果您需要一个索引(exist3)来指示您的POS在其周围是exist1=1还是+/-3,那么这应该可以:
tmp$exist3 <- apply(tmp, 1, function(x) ifelse(x[3]==1 | x[2]%in%c(sapply(c(tmp$POS[tmp$exist]), function(y) y + seq(-3,3))), 3, 0))
tmp$exist3首先按POS
对数据排序,并确定POS-lag(POS)
和POS-lead(POS)
的绝对值是否小于或等于3
library(dplyr)
tmp %>%
arrange(POS) %>%
mutate(exist3 = (exist == 1 &
abs(POS - lag(POS)) <= 3 &
abs(POS - lead(POS)) <= 3) * 3)
# CHROM POS exist exist3
# 1 1 1014179 0 0
# 2 1 1014182 0 0
# 3 1 1014217 0 0
# 4 1 1014227 0 0
# 5 1 1014228 1 3
# 6 1 1014229 0 0
# 7 1 1014231 0 0
# 8 1 1014276 0 0
# 9 1 1014359 0 0
# 10 1 1014401 0 0
# 11 1 1014422 1 0
# 12 1 1014451 0 0
库(dplyr)
tmp%>%
排列(位置)%>%
变异(exist3=(exist==1&
abs(位置-滞后(位置))存在错误。rep(PositionsIneed,3)
应修改为rep(PositionsIneed,各=3)
。您的输出看起来是正确的,这仅仅是因为PositionsIneed
有2个元素。如果它的长度不是2,exist2
将是错误的。@DarrenTsai感谢您指出,我会更正它。不,这不是正确的答案,因为它将3
分配给exist2
是0
的位置,就像分配给positi在1014422
True上,如果exist1=1且POS为POS[exist1==1]的+/-3,则该值应正确且仅为3tmp$exist3最后,我想我理解了tmp$exist3如果这是您想要的,请忽略。如果您要将#7 1 1014231
exist从0更改为1,这是否仍能给您所需的结果?