Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 变量采用新值时的ID测量_R - Fatal编程技术网

R 变量采用新值时的ID测量

R 变量采用新值时的ID测量,r,R,我相信我的问题有一个非常简单的解决办法。那样的话,我很抱歉。我一直试图寻找一个类似的问题,但徒劳无功。 我希望创建一个“ID”变量,ID3,每当ID2\u EVWIND接受一个新值时,该变量就会接受一个新值。 我的数据框的简化版本如下所示 ##1 Date ID2_EVWIND ID3 #2 8/2/02 35 1 #3 28/2/02 35 1 #4 28/2/02 35 1 #5 2/2/02 36

我相信我的问题有一个非常简单的解决办法。那样的话,我很抱歉。我一直试图寻找一个类似的问题,但徒劳无功。 我希望创建一个“ID”变量,
ID3
,每当
ID2\u EVWIND
接受一个新值时,该变量就会接受一个新值。 我的数据框的简化版本如下所示

##1 Date    ID2_EVWIND  ID3
#2  8/2/02  35          1
#3  28/2/02 35          1
#4  28/2/02 35          1
#5  2/2/02  36          2
#6  13/2/02 36          2
#7  11/2/02 36          2
#8  8/2/02  36          2
#9  8/2/02  36          2
#10 20/2/02 25          3
#11 10/2/02 25          3
#12 21/2/02 33          4
#13 4/2/02  33          4
#14 16/2/02 33          4
#15 15/2/02 33          4
#16 16/2/02 33          4
#17 23/2/02 29          5
#18 3/2/02  30          6
#19 11/2/02 30          6
#20 26/2/02 30          6
#21 26/2/02 30          6
#22 6/2/02  18          7
#23 28/2/02 18          7
#24 6/2/02  18          7
#25 13/2/02 40          8
#26 7/2/02  40          8
#27 15/2/02 40          8
#28 17/2/02 40          8
#29 16/2/02 40          8
#30 27/2/02 24          9
#31 8/2/02  24          9
#32 3/2/02  11          10
#33 2/2/02  11          10
#34 5/2/02  11          10
#35 4/2/02  12          11
我在此提供一个R中的可复制示例,其中包含我希望创建的变量,
ID3

structure(list(Date = structure(c(1013126400, 1014854400, 1014854400, 
1012608000, 1013558400, 1013385600, 1013126400, 1013126400, 1014163200, 
1013299200, 1014249600, 1012780800, 1013817600, 1013731200, 1013817600, 
1014422400, 1012694400, 1013385600, 1014681600, 1014681600, 1012953600, 
1014854400, 1012953600, 1013558400, 1013040000, 1013731200, 1013904000, 
1013817600, 1014768000, 1013126400, 1012694400, 1012608000, 1012867200, 
1012780800), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    ID2_EVWIND = c(35, 35, 35, 36, 36, 36, 36, 36, 25, 25, 33, 
    33, 33, 33, 33, 29, 30, 30, 30, 30, 18, 18, 18, 40, 40, 40, 
    40, 40, 24, 24, 11, 11, 11, 12)), row.names = c(NA, -34L), class = c("tbl_df", 
"tbl", "data.frame"))

提前感谢(!)

您可以使用
数据。表
rleid

data.table::rleid(df$ID2_EVWIND)
#[1]  1  1  1  2  2  2  2  2  3  3  4  4  4  4  4  5  6  6  6  6  7  7  7  8  8  8  8  8  9  9 10 10 10 11
另一个选项是
匹配

match(df$ID2_EVWIND, unique(df$ID2_EVWIND))

虽然在这种情况下,它们都给出了预期的输出,但当数字重复时,它们的行为是不同的。举个例子:

x <- c(1, 1, 2, 3, 3, 1, 1)
data.table::rleid(x)
#[1] 1 1 2 3 3 4 4

match(x, unique(x))
#[1] 1 1 2 3 3 1 1

x和使用
dplyr::lag
的方法:

library(dplyr)

d %>% 
  mutate(ID3 = cumsum(ID2_EVWIND != lag(ID2_EVWIND, default = 0)))
#> # A tibble: 34 x 3
#>    Date                ID2_EVWIND   ID3
#>    <dttm>                   <dbl> <int>
#>  1 2002-02-08 00:00:00         35     1
#>  2 2002-02-28 00:00:00         35     1
#>  3 2002-02-28 00:00:00         35     1
#>  4 2002-02-02 00:00:00         36     2
#>  5 2002-02-13 00:00:00         36     2
#>  6 2002-02-11 00:00:00         36     2
#>  7 2002-02-08 00:00:00         36     2
#>  8 2002-02-08 00:00:00         36     2
#>  9 2002-02-20 00:00:00         25     3
#> 10 2002-02-10 00:00:00         25     3
#> # ... with 24 more rows
库(dplyr)
d%>%
突变(ID3=cumsum(ID2_-EVWIND!=lag(ID2_-EVWIND,默认值=0)))
#>#A tibble:34 x 3
#>日期ID2\u EVWIND ID3
#>                        
#>  1 2002-02-08 00:00:00         35     1
#>  2 2002-02-28 00:00:00         35     1
#>  3 2002-02-28 00:00:00         35     1
#>  4 2002-02-02 00:00:00         36     2
#>  5 2002-02-13 00:00:00         36     2
#>  6 2002-02-11 00:00:00         36     2
#>  7 2002-02-08 00:00:00         36     2
#>  8 2002-02-08 00:00:00         36     2
#>  9 2002-02-20 00:00:00         25     3
#> 10 2002-02-10 00:00:00         25     3
#> # ... 还有24行

使用
diff

使用
dplyr

库(dplyr)
df%>%
突变(ID3=cumsum(c(1,abs(diff(ID2_EVWIND))>0)))%>
总目()
#>#tibble:6 x 3
#>日期ID2\u EVWIND ID3
#>                       
#> 1 2002-02-08 00:00:00         35     1
#> 2 2002-02-28 00:00:00         35     1
#> 3 2002-02-28 00:00:00         35     1
#> 4 2002-02-02 00:00:00         36     2
#> 5 2002-02-13 00:00:00         36     2
#> 6 2002-02-11 00:00:00         36     2
和基本r版本:

df$ID3 <-  cumsum(c(1,  abs(diff(df$ID2_EVWIND)) > 0))
head(df)         
#> # A tibble: 6 x 3
#>   Date                ID2_EVWIND   ID3
#>   <dttm>                   <dbl> <dbl>
#> 1 2002-02-08 00:00:00         35     1
#> 2 2002-02-28 00:00:00         35     1
#> 3 2002-02-28 00:00:00         35     1
#> 4 2002-02-02 00:00:00         36     2
#> 5 2002-02-13 00:00:00         36     2
#> 6 2002-02-11 00:00:00         36     2
df$ID3(0))
头部(df)
#>#tibble:6 x 3
#>日期ID2\u EVWIND ID3
#>                       
#> 1 2002-02-08 00:00:00         35     1
#> 2 2002-02-28 00:00:00         35     1
#> 3 2002-02-28 00:00:00         35     1
#> 4 2002-02-02 00:00:00         36     2
#> 5 2002-02-13 00:00:00         36     2
#> 6 2002-02-11 00:00:00         36     2
由(v0.3.0)于2020年7月11日创建