Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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”的数据集,并为新的唯一ID创建一个新列。原始数据集如下所示: zz <- "ID TIME A 0.06 A 0.26 A 0.31 A 0.47 B 0.17 B 0.37 B 0.48 B 0.55 C 0.28 C 0.40 C 0.62 C 0.76" df <- read.table(text = zz, header = TRUE) ID TIME New.ID A

我想多次复制包含不同“ID”的数据集,并为新的唯一ID创建一个新列。原始数据集如下所示:

zz <- "ID  TIME
A   0.06
A   0.26
A   0.31
A   0.47
B   0.17
B   0.37
B   0.48
B   0.55
C   0.28
C   0.40
C   0.62
C   0.76"
df <- read.table(text = zz, header = TRUE)
ID  TIME New.ID
A   0.06    1
A   0.26    1
A   0.31    1
A   0.47    1
B   0.17    2
B   0.37    2
B   0.48    2
B   0.55    2
C   0.28    3
C   0.40    3
C   0.62    3
C   0.76    3
A   0.06    4
A   0.26    4
A   0.31    4
A   0.47    4
B   0.17    5
B   0.37    5
B   0.48    5
B   0.55    5
C   0.28    6
C   0.40    6
C   0.62    6
C   0.76    6
A   0.06    7
A   0.26    7
A   0.31    7
A   0.47    7
B   0.17    8
B   0.37    8
B   0.48    8
B   0.55    8
C   0.28    9
C   0.40    9
C   0.62    9
C   0.76    9

一个选项是
rep
将行复制3,然后使用
rleid
在“ID”中相邻元素不相同时通过增加索引来创建新的ID列

library(data.table)
setDT(df1)[rep(seq_len(.N), 3)][, New.ID := rleid(ID)][]
#    ID TIME New.ID
# 1:  A 0.06      1
# 2:  A 0.26      1
# 3:  A 0.31      1
# 4:  A 0.47      1
# 5:  B 0.17      2
# 6:  B 0.37      2
# 7:  B 0.48      2
# 8:  B 0.55      2
# 9:  C 0.28      3
#10:  C 0.40      3
#11:  C 0.62      3
#12:  C 0.76      3
#13:  A 0.06      4
#14:  A 0.26      4
#15:  A 0.31      4
#16:  A 0.47      4
#17:  B 0.17      5
#18:  B 0.37      5
#19:  B 0.48      5
#20:  B 0.55      5
#21:  C 0.28      6
#22:  C 0.40      6
#23:  C 0.62      6
#24:  C 0.76      6
#25:  A 0.06      7
#26:  A 0.26      7
#27:  A 0.31      7
#28:  A 0.47      7
#29:  B 0.17      8
#30:  B 0.37      8
#31:  B 0.48      8
#32:  B 0.55      8
#33:  C 0.28      9
#34:  C 0.40      9
#35:  C 0.62      9
#36:  C 0.76      9

或者使用
dplyr

library(dplyr)
df1 %>% 
     slice(rep(row_number(), 3)) %>%
     mutate(New.ID = rleid(ID))
数据
df1带有
replicate
+
rle

within(
  do.call(rbind, replicate(3, df, simplify = FALSE)),
  New.ID <- rep(seq_along(rle(ID)$lengths), rle(ID)$lengths)
)

我有一个关于我的帖子的问题。你能看一看吗:另外,这个问题对我来说特别具有挑战性(我已经有一段时间没有说过了:D),所以如果你愿意发布一个答案,那也太好了。
within(
  do.call(rbind, replicate(3, df, simplify = FALSE)),
  New.ID <- rep(seq_along(rle(ID)$lengths), rle(ID)$lengths)
)
> dput(df)
structure(list(ID = c("A", "A", "A", "A", "B", "B", "B", "B", 
"C", "C", "C", "C"), TIME = c(0.06, 0.26, 0.31, 0.47, 0.17, 0.37,
0.48, 0.55, 0.28, 0.4, 0.62, 0.76)), class = "data.frame", row.names = c(NA,
-12L))