R data.table 选择 2 行继续创建新的 table
R data.table pick 2 continue rows to create new table
我想创建新的 table,这是我的旧 table 的 2 对连续行。
A B
1 a
2 b
3 c
4 d
5 e
我想创建新的 table,如下所示。
A1 B1 A2 B2
1 a 2 b
2 b 3 c
3 c 4 d
4 d 5 e
我想为这种情况找到简单的解决方案。
根据你的问题陈述,我认为这应该是一个解决方案
newtable <- cbind(oldtable[-nrow(oldtable), ], oldtable[-1, ])
colnames(newtable) <- paste0(c("A", "B"), rep(1:2, each = 2))
我找到了问题的答案
DT <- data.table(A=c(1:5), B=letters[1:5])
DT[, data.table(.SD, DT[.I + 1][, .(A1=A, B1=B)]), by=.I][-.N]
更新以添加@B.Shankar
的简短版本
cbind(DT[-.N], DT[-1][, .(A1=A, B1=B)])
您也可以使用 data.table
的开发版本中的 shift
即。 v1.9.5+
。安装说明是 here
library(data.table)
setDT(df1)[, paste0(names(df1),2):= shift(.SD, type='lead')][-.N]
# A B A2 B2
#1: 1 a 2 b
#2: 2 b 3 c
#3: 3 c 4 d
#4: 4 d 5 e
数据
df1 <- structure(list(A = 1:5, B = c("a", "b", "c", "d", "e")),
.Names = c("A", "B"), class = "data.frame", row.names = c(NA, -5L))
我想创建新的 table,这是我的旧 table 的 2 对连续行。
A B
1 a
2 b
3 c
4 d
5 e
我想创建新的 table,如下所示。
A1 B1 A2 B2
1 a 2 b
2 b 3 c
3 c 4 d
4 d 5 e
我想为这种情况找到简单的解决方案。
根据你的问题陈述,我认为这应该是一个解决方案
newtable <- cbind(oldtable[-nrow(oldtable), ], oldtable[-1, ])
colnames(newtable) <- paste0(c("A", "B"), rep(1:2, each = 2))
我找到了问题的答案
DT <- data.table(A=c(1:5), B=letters[1:5])
DT[, data.table(.SD, DT[.I + 1][, .(A1=A, B1=B)]), by=.I][-.N]
更新以添加@B.Shankar
的简短版本cbind(DT[-.N], DT[-1][, .(A1=A, B1=B)])
您也可以使用 data.table
的开发版本中的 shift
即。 v1.9.5+
。安装说明是 here
library(data.table)
setDT(df1)[, paste0(names(df1),2):= shift(.SD, type='lead')][-.N]
# A B A2 B2
#1: 1 a 2 b
#2: 2 b 3 c
#3: 3 c 4 d
#4: 4 d 5 e
数据
df1 <- structure(list(A = 1:5, B = c("a", "b", "c", "d", "e")),
.Names = c("A", "B"), class = "data.frame", row.names = c(NA, -5L))