简体   繁体   English

R - 在非空行之间的空行中顺序生成数字

[英]R - Sequentially produce numbers in empty rows between non-empty rows

If I have a data frame defined as such:如果我有一个这样定义的数据框:

     X      Condition
NA            One
0.169358185   NA
0.94108908    NA
0.772270715   NA
0.809542856   NA
0.426230376   NA
0.54298465    NA
0.386102588   NA
0.147564719   NA
NA            Two
0.083204676   NA
0.030533656   NA
0.905891284   NA
NA            One
0.30843373    NA
0.417785805   NA
0.063145741   NA
0.328035986   NA
NA            Two
0.045242478   NA
0.64039683    NA
0.301090671   NA
0.127325708   NA

And I'd like to sequentially produce numbers between the non-NA values in the Condition column to ultimately end up with a data frame like this:我想在Condition列中的非 NA 值之间顺序生成数字,最终得到这样的数据框:

     X      Condition
NA            One
0.169358185   1
0.94108908    2
0.772270715   3
0.809542856   4
0.426230376   5
0.54298465    6
0.386102588   7
0.147564719   8
NA            Two
0.083204676   1
0.030533656   2
0.905891284   3
NA            One
0.30843373    1
0.417785805   2
0.063145741   3
0.328035986   4

How can I do this?我怎样才能做到这一点? This would be a simple seq() solution if the length between non-NA values was constant, but this is not the case.如果非 NA 值之间的长度是恒定的,这将是一个简单的seq()解决方案,但事实并非如此。 It varies randomly between any two non-NA values.它在任何两个非 NA 值之间随机变化。

Use sequence to generate a series of sequences defined by the distances between each text label in dat$Condition :使用sequence生成由dat$Condition每个文本标签之间的距离定义的一系列序列:

dat$new <- sequence(diff(c(which(!is.na(dat$Condition)),length(dat$Condition)+1)))-1
dat

#            X Condition new
#1          NA       One   0
#2  0.16935818      <NA>   1
#3  0.94108908      <NA>   2
#4  0.77227071      <NA>   3
#5  0.80954286      <NA>   4
#6  0.42623038      <NA>   5
#7  0.54298465      <NA>   6
#8  0.38610259      <NA>   7
#9  0.14756472      <NA>   8
#10         NA       Two   0
#11 0.08320468      <NA>   1
#12 0.03053366      <NA>   2
#13 0.90589128      <NA>   3
#14         NA       One   0
#15 0.30843373      <NA>   1
#16 0.41778581      <NA>   2
#17 0.06314574      <NA>   3
#18 0.32803599      <NA>   4
#19         NA       Two   0
#20 0.04524248      <NA>   1
#21 0.64039683      <NA>   2
#22 0.30109067      <NA>   3
#23 0.12732571      <NA>   4

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM