我正在尝试创建一个"filter-by“矩阵,我可以用它来隔离我的数据帧中的数据行,这样每一行只包含对应于相同数字的最长连续序列的值,而其余的则保持为零。在四处搜索后,我认为rle是要使用的函数,但这并没有给我想要的东西。以下是我的代码和结果的示例。我们将非常感谢您的建议和解决方案。谢谢!
示例数据:
a<- c(1,0,1,1,1,1,0,0)
b<- c(0,0,0,1,1,1,0,1)
c<- c(0,0,1,1,0,0,0,1)
d<- c(1,0,0,1,1,1,1,0)
e<- c(1,0,0,1,0,0,1,1)
f<- c(0,0,0,1,1,1,0,1)
g<- c(0,0,1,1,0,0,0,1)
test.data <- data.frame(cbind(a,b,c,d,e,f,g))
# > test.data
# a b c d e f g
# 1 1 0 0 1 1 0 0
# 2 0 0 0 0 0 0 0
# 3 1 0 1 0 0 0 1
# 4 1 1 1 1 1 1 1
# 5 1 1 0 1 0 1 0
# 6 1 1 0 1 0 1 0
# 7 0 0 0 1 1 0 0
# 8 0 1 1 0 1 1 1
尝试解决方案的示例代码:
result <- data.frame(lapply(test.data, function(x) {
r <- rle(x)
r$values[r$lengths!=max(r$lengths)]==1
r2=inverse.rle(r)
r2
}))
我得到的结果(看起来和放进去的东西完全一样?):
# > result
# a b c d e f g
# 1 1 0 0 1 1 0 0
# 2 0 0 0 0 0 0 0
# 3 1 0 1 0 0 0 1
# 4 1 1 1 1 1 1 1
# 5 1 1 0 1 0 1 0
# 6 1 1 0 1 0 1 0
# 7 0 0 0 1 1 0 0
# 8 0 1 1 0 1 1 1
这是我想要得到的结果(T/F可以用来代替1和0,如果容易的话):
# > result
# a b c d e f g
# 1 0 0 0 1 1 0 0
# 2 0 0 0 0 0 0 0
# 3 0 0 0 0 0 0 0
# 4 1 1 1 1 1 1 1
# 5 1 1 0 0 0 0 0
# 6 1 1 0 0 0 0 0
# 7 0 0 0 1 1 0 0
# 8 0 0 0 0 1 1 1
敬请指教!
https://stackoverflow.com/questions/50767114
复制相似问题