This question already has answers here:
Add index to contiguous runs of equal values
(3个答案)
5年前关闭。
我有一个
这类似于但不同于
我可以尝试
似乎应该有一个直接执行此操作的函数,我在经验中还没有发现。
您的意思是:如果值与下一行的值相同,或者下一行的值为NA,则增加计数。
这就是说:如果该行上的变量与上一行中的变量不同,或者上一行(例如第1行)中没有一个变量,则增加计数。
(3个答案)
5年前关闭。
我有一个
data_frame
,其中字符变量x
随时间变化。我想计算变化的次数,并用此计数填充新的 vector 。df <- data_frame(
x = c("a", "a", "b", "b", "c", "b"),
wanted = c(1, 1, 2, 2, 3, 4)
)
x wanted
1 a 1
2 a 1
3 b 2
4 b 2
5 c 3
6 b 4
这类似于但不同于
rle(df$x)
,它将返回Run Length Encoding
lengths: int [1:4] 2 2 1 1
values : chr [1:4] "a" "b" "c" "b"
我可以尝试
rep()
该输出。我也尝试过这种方法,它非常接近,但不是出于无法立即找出原因的原因: df %>% mutate(
try_1 = cumsum(ifelse(x == lead(x) | is.na(lead(x)), 1, 0))
)
Source: local data frame [6 x 3]
x wanted try_1
1 a 1 1
2 a 1 1
3 b 2 2
4 b 2 2
5 c 3 2
6 b 4 3
似乎应该有一个直接执行此操作的函数,我在经验中还没有发现。
最佳答案
试试这个dplyr
代码:
df %>%
mutate(try_1 = cumsum(ifelse(x != lag(x) | is.na(lag(x)), 1, 0)))
x wanted try_1
1 a 1 1
2 a 1 1
3 b 2 2
4 b 2 2
5 c 3 3
6 b 4 4
您的意思是:如果值与下一行的值相同,或者下一行的值为NA,则增加计数。
这就是说:如果该行上的变量与上一行中的变量不同,或者上一行(例如第1行)中没有一个变量,则增加计数。
关于r - 计算字符向量内容的变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29376178/
10-12 19:22