R 基于复制观察创建新列

R 基于复制观察创建新列,r,append,data-manipulation,replicate,R,Append,Data Manipulation,Replicate,我有一个问题,如何基于另一列创建新列。 这是我的数据部分: Category Brand Time1 value Time2 number 2 HTC 2015-01-01 1724 NA 1 6 APPLE 2015-10-10 3000 2015-10-30 1 2 APPLE 2016-01-15 4

我有一个问题,如何基于另一列创建新列。
这是我的
数据部分

Category  Brand    Time1          value   Time2        number   
2         HTC      2015-01-01     1724    NA           1      
6         APPLE    2015-10-10     3000    2015-10-30   1
2         APPLE    2016-01-15     430     NA           1
NA        Samsung  2016-10-20     860     2016-12-20   1
我显示4个OB。关于上面的
数据
,我解释我的
数据
更多:
首先,请看结构

> str(data)
Classes ‘data.table’ and 'data.frame':  105907 obs. of  6 variables:
$ Category     : num  2 2 2 2 2 2 2 2 2 2 ...
$ Brand        : chr  "HTC" "APPLE" "INFOCUS" "APPLE" ...
$ Time1        : POSIXct, format: "2015-01-01" "2015-01-01" "2015-01-01" "2015-01-01" ...
$ value        : num  1724 2946 330 2946 2946 ...
$ Time2        : POSIXct, format: NA NA NA "2015-01-03" ...
$ number         : chr  "1" "1" "1" "1" ...
- attr(*, ".internal.selfref")=<externalptr>  
现在,
数据
如下所示:

Category  Brand    Time1          value   Time2        number   rep
2         HTC      2015-01-01     1724    NA           1        13       
2         HTC      2015-01-01     1724    NA           1        13       
2         HTC      2015-01-01     1724    NA           1        13   
2         HTC      2015-01-01     1724    NA           1        13     
2         HTC      2015-01-01     1724    NA           1        13
2         HTC      2015-01-01     1724    NA           1        13
2         HTC      2015-01-01     1724    NA           1        13
2         HTC      2015-01-01     1724    NA           1        13
2         HTC      2015-01-01     1724    NA           1        13
2         HTC      2015-01-01     1724    NA           1        13
2         HTC      2015-01-01     1724    NA           1        13
2         HTC      2015-01-01     1724    NA           1        13
2         HTC      2015-01-01     1724    NA           1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
6         APPLE    2015-10-10     3000    2015-10-30   1        13
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
2         APPLE    2016-01-15     430     NA           1        12
NA        Samsung  2016-10-20     860     2016-12-20   1        3
NA        Samsung  2016-10-20     860     2016-12-20   1        3
NA        Samsung  2016-10-20     860     2016-12-20   1        3
第三,我想创建一个新的列
失效
,结果是:

Category  Brand    Time1          value   Time2        number   rep   Lapse
2         HTC      2015-01-01     1724    NA           1        13    0   
2         HTC      2015-01-01     1724    NA           1        13    1   
2         HTC      2015-01-01     1724    NA           1        13    2
2         HTC      2015-01-01     1724    NA           1        13    3 
2         HTC      2015-01-01     1724    NA           1        13    4
2         HTC      2015-01-01     1724    NA           1        13    5
2         HTC      2015-01-01     1724    NA           1        13    6
2         HTC      2015-01-01     1724    NA           1        13    7 
2         HTC      2015-01-01     1724    NA           1        13    8
2         HTC      2015-01-01     1724    NA           1        13    9 
2         HTC      2015-01-01     1724    NA           1        13    10 
2         HTC      2015-01-01     1724    NA           1        13    11
2         HTC      2015-01-01     1724    NA           1        13    12
6         APPLE    2015-10-10     3000    2015-10-30   1        13    0
6         APPLE    2015-10-10     3000    2015-10-30   1        13    1
6         APPLE    2015-10-10     3000    2015-10-30   1        13    2
6         APPLE    2015-10-10     3000    2015-10-30   1        13    3
6         APPLE    2015-10-10     3000    2015-10-30   1        13    4
6         APPLE    2015-10-10     3000    2015-10-30   1        13    5
6         APPLE    2015-10-10     3000    2015-10-30   1        13    6
6         APPLE    2015-10-10     3000    2015-10-30   1        13    7
6         APPLE    2015-10-10     3000    2015-10-30   1        13    8
6         APPLE    2015-10-10     3000    2015-10-30   1        13    9 
6         APPLE    2015-10-10     3000    2015-10-30   1        13    10
6         APPLE    2015-10-10     3000    2015-10-30   1        13    11
6         APPLE    2015-10-10     3000    2015-10-30   1        13    12 
2         APPLE    2016-01-15     430     NA           1        12    0
2         APPLE    2016-01-15     430     NA           1        12    1
2         APPLE    2016-01-15     430     NA           1        12    2
2         APPLE    2016-01-15     430     NA           1        12    3
2         APPLE    2016-01-15     430     NA           1        12    4
2         APPLE    2016-01-15     430     NA           1        12    5 
2         APPLE    2016-01-15     430     NA           1        12    6 
2         APPLE    2016-01-15     430     NA           1        12    7
2         APPLE    2016-01-15     430     NA           1        12    8
2         APPLE    2016-01-15     430     NA           1        12    9
2         APPLE    2016-01-15     430     NA           1        12    10 
2         APPLE    2016-01-15     430     NA           1        12    11
NA        Samsung  2016-10-20     860     2016-12-20   1        3     0
NA        Samsung  2016-10-20     860     2016-12-20   1        3     1
NA        Samsung  2016-10-20     860     2016-12-20   1        3     2
以上是我想要的结果,我尝试以下代码:

data[,Lapse := seq_len(.N)-1, by = (Category,Brand,Time1,value,Time2,number)]   
然而,这是错误的

如果是对的,

uniqie(data$Lapse) 
[1] 0 1 2 3 4 5 6 7 8 9 10 11 12 
但是,我得到了
0~999
。我认为我的代码错了。
有什么建议吗?
或者也许还有其他的好方法

更新

data <- "    Category        Brand Time1 value Time2 number
1:        2          HTC    2015-01-01    1724       NA    1
2:        2        APPLE    2015-01-01    2946       NA    1
3:        2      INFOCUS    2015-01-01     330       NA    1
4:        2        APPLE    2015-01-01    2946 2015-01-03    1
5:        2        APPLE    2015-01-01    2946       NA    1
6:        2      Samsung    2015-01-01    2189       NA    1
7:        2          HTC    2015-01-01     730       NA    1
8:        2      Samsung    2015-01-01    2189       NA    1
9:        2      Samsung    2015-01-01    2189       NA    1
10:        2          HTC    2015-01-01    1296       NA    1
11:        2          HTC    2015-01-01     730       NA    1
12:        2        APPLE    2015-01-01    2189       NA    1
13:        2      INFOCUS    2015-01-01     330 2015-01-02    1
14:        2          HTC    2015-01-01    2189       NA    1
15:        2         SONY    2015-01-01    1296       NA    1
16:        2          HTC    2015-01-01     730       NA    1
17:        2        APPLE    2015-01-01    2946       NA    1
18:        2        APPLE    2015-01-01    2946       NA    1
19:        2          HTC    2015-01-01    1724       NA    1
20:        2      Samsung    2015-01-02    1724       NA    1
21:        2      Samsung    2015-01-02    2189       NA    1
22:        2          HTC    2015-01-02     730       NA    1
23:        2      Samsung    2015-01-02    2189       NA    1
24:        2          HTC    2015-01-02     730       NA    1
25:        2        APPLE    2015-01-02    2946       NA    1
26:        2          HTC    2015-01-02    1724       NA    1
27:        2          HTC    2015-01-02     730       NA    1
28:        2         ASUS    2015-01-02     330       NA    1
29:        2         ASUS    2015-01-02     330       NA    1
30:        2      Samsung    2015-01-02    1724       NA    1
31:        2        APPLE    2015-01-02    2189       NA    1
32:        2          HTC    2015-01-02     730       NA    1
33:        2      Samsung    2015-01-02     730       NA    1
34:        2          HTC    2015-01-02     730       NA    1
35:        2          HTC    2015-01-02     730       NA    1
36:        2          HTC    2015-01-02     730       NA    1
37:        2      Samsung    2015-01-02     730       NA    1
38:        2        APPLE    2015-01-03    2189       NA    1
39:        2        APPLE    2015-01-03    2946       NA    1
40:        2       Benten    2015-01-03     330       NA    1
41:        2        APPLE    2015-01-03    2946       NA    1
42:        2      INFOCUS    2015-01-03     330       NA    1
43:        2      Samsung    2015-01-03    1296       NA    1
44:        2          HTC    2015-01-03     730       NA    1
45:        2      Samsung    2015-01-03    2189       NA    1
46:        2         SONY    2015-01-03    2189       NA    1
47:        2 TaiwanMobile    2015-01-03     730       NA    1
48:        2          HTC    2015-01-03    1296       NA    1
49:        2          HTC    2015-01-03     730       NA    1
50:        2        APPLE    2015-01-03    2189       NA    1
51:        2        APPLE    2015-01-03    2189       NA    1
52:        2          HTC    2015-01-03     730       NA    1
53:        2      Samsung    2015-01-03     330       NA    1
54:        2 TaiwanMobile    2015-01-03     730       NA    1
55:        2          HTC    2015-01-03     730       NA    1
56:        2          HTC    2015-01-03     730       NA    1
57:        2 TaiwanMobile    2015-01-03     330       NA    1
58:        2      Samsung    2015-01-03    1724 2015-01-04    1
59:        2          HTC    2015-01-03     730       NA    1
60:        2      INFOCUS    2015-01-03     330       NA    1
61:        2         SONY    2015-01-03     730       NA    1
62:        2          HTC    2015-01-04     730       NA    1
63:        2          HTC    2015-01-04     730       NA    1
64:        2        APPLE    2015-01-04    2189 2015-01-05    1
65:        2 TaiwanMobile    2015-01-04     730 2015-01-05    1"  

data <- read.table(text=data, header = TRUE)
data <- as.data.table(data)
data <- data[,rep:=ifelse(year(Time1)==2016, 12-month(Time1)+1, 13)][rep(1:.N,rep)][]
data[, Lapse := seq_len(.N)-1 , .(Category, Brand, Time1, value, Time2, number)]

dput(droplevels(head(data,65)))
structure(list(Category = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), Brand = c("HTC", "APPLE", 
"INFOCUS", "APPLE", "APPLE", "Samsung", "HTC", "Samsung", "Samsung", 
"HTC", "HTC", "APPLE", "INFOCUS", "HTC", "SONY", "HTC", "APPLE", 
"APPLE", "HTC", "Samsung", "Samsung", "HTC", "Samsung", "HTC", 
"APPLE", "HTC", "HTC", "ASUS", "ASUS", "Samsung", "APPLE", "HTC", 
"Samsung", "HTC", "HTC", "HTC", "Samsung", "APPLE", "APPLE", 
"Benten", "APPLE", "INFOCUS", "Samsung", "HTC", "Samsung", "SONY", 
"TaiwanMobile", "HTC", "HTC", "APPLE", "APPLE", "HTC", "Samsung", 
"TaiwanMobile", "HTC", "HTC", "TaiwanMobile", "Samsung", "HTC", 
"INFOCUS", "SONY", "HTC", "HTC", "APPLE", "TaiwanMobile"), Time1 = structure(c(1420070400, 
1420070400, 1420070400, 1420070400, 1420070400, 1420070400, 1420070400, 
1420070400, 1420070400, 1420070400, 1420070400, 1420070400, 1420070400, 
1420070400, 1420070400, 1420070400, 1420070400, 1420070400, 1420070400, 
1420156800, 1420156800, 1420156800, 1420156800, 1420156800, 1420156800, 
1420156800, 1420156800, 1420156800, 1420156800, 1420156800, 1420156800, 
1420156800, 1420156800, 1420156800, 1420156800, 1420156800, 1420156800, 
1420243200, 1420243200, 1420243200, 1420243200, 1420243200, 1420243200, 
1420243200, 1420243200, 1420243200, 1420243200, 1420243200, 1420243200, 
1420243200, 1420243200, 1420243200, 1420243200, 1420243200, 1420243200, 
1420243200, 1420243200, 1420243200, 1420243200, 1420243200, 1420243200, 
1420329600, 1420329600, 1420329600, 1420329600), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), value = c(1724, 2946, 330, 2946, 
2946, 2189, 730, 2189, 2189, 1296, 730, 2189, 330, 2189, 1296, 
730, 2946, 2946, 1724, 1724, 2189, 730, 2189, 730, 2946, 1724, 
730, 330, 330, 1724, 2189, 730, 730, 730, 730, 730, 730, 2189, 
2946, 330, 2946, 330, 1296, 730, 2189, 2189, 730, 1296, 730, 
2189, 2189, 730, 330, 730, 730, 730, 330, 1724, 730, 330, 730, 
730, 730, 2189, 730), Time2 = structure(c(NA, NA, NA, 1420243200, 
NA, NA, NA, NA, NA, NA, NA, NA, 1420156800, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, 1420329600, NA, NA, NA, NA, NA, 1420416000, 
1420416000), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
number = c("1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1")), .Names = c("Category", 
"Brand", "Time1", "value", "Time2", "number"), row.names = c(NA, 
-65L), .internal.selfref = <pointer: 0x003e24a0>, class = c("data.table", 
"data.frame"))

问题是原始数据没有更新,因为它的行数与以前相同。如果我们检查

data[,rep:=ifelse(year(Time1)==2016, 12-month(Time1)+1, 13)][rep(1:.N,rep)]
然后是

data
这是显而易见的

因此,我们将这两个步骤的输出分配回原始对象(“数据”)或另一个对象(如果我们不想更改原始对象)


data@PeterChen根据您显示的预期值,我正在获取示例上的值OK,可能问题是我的
数据
Ithink@PeterChen它是基于原始数据集还是基于示例中显示的数据集?原始数据集。所以,也许我需要在first@PeterChen好的,请检查原始数据的str。如果可能,提供一个可重复的小示例,使用
dput
显示问题。您是否可以检查这些NAs是真实的NAs或字符串或因子?另外,假设复制后的“时间2”是说
c(不适用,不适用,'2015-10-30','2015-10-30',不适用,不适用)
。唯一的问题是,您可以在创建“失效”列之后或之前进行排序,
dplyr::group_by
在这里什么都不做。您可能需要
数据您可以执行
数据[data[,do.call(order.SD),.SDcols=1:6]
@akrun我运行Chen的更新代码,我可以得到他的示例并与他得到相同的结果。我想如果你这样做,你也会得到同样的结果。这个问题可能是因为他的其他专栏没有在这个问题上出现。
data[,rep:=ifelse(year(Time1)==2016, 12-month(Time1)+1, 13)][rep(1:.N,rep)]
data
data <-  data[,rep:=ifelse(year(Time1)==2016, 12-month(Time1)+1, 13)][rep(1:.N,rep)]
data[, Lapse := seq_len(.N)-1 , .(Category, Brand, Time1, value, Time2, number)]
data
    Category   Brand      Time1 value      Time2 number rep Lapse
 1:        2     HTC 2015-01-01  1724       <NA>      1  13     0
 2:        2     HTC 2015-01-01  1724       <NA>      1  13     1
 3:        2     HTC 2015-01-01  1724       <NA>      1  13     2
 4:        2     HTC 2015-01-01  1724       <NA>      1  13     3
 5:        2     HTC 2015-01-01  1724       <NA>      1  13     4
 6:        2     HTC 2015-01-01  1724       <NA>      1  13     5
 7:        2     HTC 2015-01-01  1724       <NA>      1  13     6
 8:        2     HTC 2015-01-01  1724       <NA>      1  13     7
 9:        2     HTC 2015-01-01  1724       <NA>      1  13     8
10:        2     HTC 2015-01-01  1724       <NA>      1  13     9
11:        2     HTC 2015-01-01  1724       <NA>      1  13    10
12:        2     HTC 2015-01-01  1724       <NA>      1  13    11
13:        2     HTC 2015-01-01  1724       <NA>      1  13    12
14:        6   APPLE 2015-10-10  3000 2015-10-30      1  13     0
15:        6   APPLE 2015-10-10  3000 2015-10-30      1  13     1
16:        6   APPLE 2015-10-10  3000 2015-10-30      1  13     2
17:        6   APPLE 2015-10-10  3000 2015-10-30      1  13     3
18:        6   APPLE 2015-10-10  3000 2015-10-30      1  13     4
19:        6   APPLE 2015-10-10  3000 2015-10-30      1  13     5
20:        6   APPLE 2015-10-10  3000 2015-10-30      1  13     6
21:        6   APPLE 2015-10-10  3000 2015-10-30      1  13     7
22:        6   APPLE 2015-10-10  3000 2015-10-30      1  13     8
23:        6   APPLE 2015-10-10  3000 2015-10-30      1  13     9
24:        6   APPLE 2015-10-10  3000 2015-10-30      1  13    10
25:        6   APPLE 2015-10-10  3000 2015-10-30      1  13    11
26:        6   APPLE 2015-10-10  3000 2015-10-30      1  13    12
27:        2   APPLE 2016-01-15   430       <NA>      1  12     0
28:        2   APPLE 2016-01-15   430       <NA>      1  12     1
29:        2   APPLE 2016-01-15   430       <NA>      1  12     2
30:        2   APPLE 2016-01-15   430       <NA>      1  12     3
31:        2   APPLE 2016-01-15   430       <NA>      1  12     4
32:        2   APPLE 2016-01-15   430       <NA>      1  12     5
33:        2   APPLE 2016-01-15   430       <NA>      1  12     6
34:        2   APPLE 2016-01-15   430       <NA>      1  12     7
35:        2   APPLE 2016-01-15   430       <NA>      1  12     8
36:        2   APPLE 2016-01-15   430       <NA>      1  12     9
37:        2   APPLE 2016-01-15   430       <NA>      1  12    10
38:        2   APPLE 2016-01-15   430       <NA>      1  12    11
39:       NA Samsung 2016-10-20   860 2016-12-20      1   3     0
40:       NA Samsung 2016-10-20   860 2016-12-20      1   3     1
41:       NA Samsung 2016-10-20   860 2016-12-20      1   3     2