R 根据数据框列创建多个序列
从数据开始,用1填充所需序列的开头,我需要用序列填充NA行。以下是起始数据(前两列)和所需的第三列: 我可以通过下面的循环来实现这一点,但是什么是更好的R编程方式呢R 根据数据框列创建多个序列,r,R,从数据开始,用1填充所需序列的开头,我需要用序列填充NA行。以下是起始数据(前两列)和所需的第三列: 我可以通过下面的循环来实现这一点,但是什么是更好的R编程方式呢 for(i in 1:length(df2$col2)) { df2$col3[i] <- ifelse(df2$col2[i] == 1, 1, df2$col3[i - 1] + 1) if(is.na(df2$col2[i])) df2$col3[i] <- df2$col3[i - 1] + 1 }
for(i in 1:length(df2$col2)) {
df2$col3[i] <- ifelse(df2$col2[i] == 1, 1, df2$col3[i - 1] + 1)
if(is.na(df2$col2[i])) df2$col3[i] <- df2$col3[i - 1] + 1
}
尝试:
库(data.table)
df2您可以使用ave
和seq_沿着
使用cumsum
进行分组
df2$col3 <- ave(integer(nrow(df2)), cumsum(!is.na(df2$col2)), FUN=seq_along)
df2
# col1 col2 col3
#1 478.69000 1 1
#2 320.45000 NA 2
#3 503.70000 1 1
#4 609.30000 NA 2
#5 478.19000 NA 3
#6 478.69000 1 1
#7 320.45000 NA 2
#8 503.70000 1 1
#9 609.30000 NA 2
#10 478.19000 NA 3
#11 419.63368 NA 4
#12 552.93998 NA 5
#13 785.11939 1 1
#14 18.25427 NA 2
#15 98.64697 NA 3
#16 132.58726 NA 4
#17 697.11955 NA 5
#18 512.56037 NA 6
#19 916.42520 NA 7
#20 14.33851 NA 8
df2$col3这不是你提出的同一个问题吗?我有多条消息说这篇文章不起作用,所以我认为它消失了,于是我重复了一遍。似乎这是在一次维护大修期间。所以,是的,对不起。但是你的答案采用了不同的方法,所以保留这两个帖子会更好吗?
library(data.table)
df2 <- data.table(df2)
df2[, col3 := col2[1] + 1 * (1:.N - 1), by = .(cumsum(!is.na(col2)))]
df2$col3 <- ave(integer(nrow(df2)), cumsum(!is.na(df2$col2)), FUN=seq_along)
df2
# col1 col2 col3
#1 478.69000 1 1
#2 320.45000 NA 2
#3 503.70000 1 1
#4 609.30000 NA 2
#5 478.19000 NA 3
#6 478.69000 1 1
#7 320.45000 NA 2
#8 503.70000 1 1
#9 609.30000 NA 2
#10 478.19000 NA 3
#11 419.63368 NA 4
#12 552.93998 NA 5
#13 785.11939 1 1
#14 18.25427 NA 2
#15 98.64697 NA 3
#16 132.58726 NA 4
#17 697.11955 NA 5
#18 512.56037 NA 6
#19 916.42520 NA 7
#20 14.33851 NA 8