使用R for循环更新数据框中的列值

问题描述 投票:0回答:1

我有一个带有两个向量的简单数据框,“RECORDS”和“FLAG”,如下所示:

RECORDS  FLAG
H12434   TRUE
W3211    FALSE
Maa      FALSE
Mab      FALSE
Mac      FALSE 
Mad      FALSE
T1_12    FALSE
H7367    TRUE
R001     FALSE
W4810.5  FALSE
Maa      FALSE
Mab      FALSE
T2_12    FALSE

我想先将TRUE更改为1,然后将所有后续FALSE更改为1,当第二个TRUE出现时,将计数器增加1并将第二个TRUE和随后的FALSE更改为2.因此结果应如下所示:

RECORDS  FLAG
H12434   1
W3211    1
Maa      1
Mab      1
Mac      1
Mad      1
T1_12    1
H7367    2
R001     2
W4810.5  2
Maa      2
Mab      2
T2_12    2

我尝试了很多像下面这样的循环,但我没有足够的经验让它工作。

counter = 0
for (i in seq_along(data))
  {
    if(data$flag == TRUE) 
    {
      counter <- counter + 1
      data$flag <- counter
    }
    else
    {
      data$flag <- counter
    }
  }

我希望有人可以帮助我理解我在这里做错的所有事情。谢谢。

r
1个回答
1
投票

我对你所追求的事情并不完全清楚,但这不仅仅是cumsum的一个简单问题吗?

transform(df, FLAG = cumsum(FLAG))
#   RECORDS FLAG
#1   H12434    1
#2    W3211    1
#3      Maa    1
#4      Mab    1
#5      Mac    1
#6      Mad    1
#7    T1_12    1
#8    H7367    2
#9     R001    2
#10 W4810.5    2
#11     Maa    2
#12     Mab    2
#13   T2_12    2

或者使用dplyr

library(dplyr)
df %>% mutate(FLAG = cumsum(FLAG))

样本数据

df <- read.table(text =
    "RECORDS  FLAG
H12434   TRUE
W3211    FALSE
Maa      FALSE
Mab      FALSE
Mac      FALSE
Mad      FALSE
T1_12    FALSE
H7367    TRUE
R001     FALSE
W4810.5  FALSE
Maa      FALSE
Mab      FALSE
T2_12    FALSE", header = T)
© www.soinside.com 2019 - 2024. All rights reserved.