如果这被认为是我应该能够从其他询问中回答的问题,请提前道歉。
我有一个包含多列的数据框 - 如下所示:
v1<-c(1450,NA, NA, 1466,NA,NA,1650,1654,1943,NA,2568,NA, 7586)
v2<-c(1450,NA, NA, 1466,1561,NA,1650,NA,NA,NA,2568,NA, 7586)
df<-data.frame(v1, v2)
我想为每一栏做以下事情:
r1_v1 <- rle(is.na(df$v1)) #rle on whether values are NA
r2_v1 <- rle(!is.na(df$v1)) #rle on whether values are NOT NA
gaps_v1 <- df$v1[cumsum(r1_v1$lengths)[r1_v1$values]+1] - #upper bound of each NA group
df$v1[c(1,cumsum(r1_v1$lengths))[r1_v1$values]] #lower bound
write.table(gaps_v1, file="gaps_v1.txt", sep=",")
x<- df$v1[cumsum(r2_v1$lengths)[r2_v1$values]]
x2 <- x[-1]
cont_v1<- x2-
df$v1[cumsum(r1_v1$lengths)[r1_v1$values]+1]
cont_v1<-replace(cont_v1, cont_v1==0, 1)
write.table(cont_v1, file="cont_v1.txt", sep=",")
我尝试使用进行循环 - 但无法弄清楚如何遍历每一列(v1,v2等)。
如上所示,我希望每列写入文件的间隙和 cont 输出。
或者,可以将它们编译成1个数据框/列表,并将相应的列名作为附加变量,如下所示:
"x", "column"
"1",16, "v1"
"2",184, "v1"
"3",625, "v1"
"4",5018, "v1"
"5", 16, "v2"
"6", 89, "v2"
...
编辑:用语言:我想运行 rle 来计算数字之间的间隙长度(即v1中的1450-1466),以及连续观察的长度(即对于数据集中的每一列(v1,v2等),在v2中为1466-1561。我已经对 rle 计算有了一些帮助,现在我要求帮助设置一个循环来分析我的整个数据集。
EDIT2:从头开始构建所有内容可能会更好,另请参阅我的其他帖子,描述最初的问题(不是循环)。 Link to previous post