R 数据操作问题
我想创建两个名为prey和preyrow的新列。猎物是下一个位置的y值,但在相同的x值内。preyrow值是同一x值内的下一个位置行值 原始表格如下:R 数据操作问题,r,R,我想创建两个名为prey和preyrow的新列。猎物是下一个位置的y值,但在相同的x值内。preyrow值是同一x值内的下一个位置行值 原始表格如下: x y row 1 1 0.60697546 1 2 1 -0.68600911 2 3 1 -0.53499454 3 4 1 0.05591587 4 5 2 0.11937963 5 6 2 -0.39951846 6 7 2 0.97430697 7 8 3
x y row
1 1 0.60697546 1
2 1 -0.68600911 2
3 1 -0.53499454 3
4 1 0.05591587 4
5 2 0.11937963 5
6 2 -0.39951846 6
7 2 0.97430697 7
8 3 0.42852135 8
9 3 0.27695563 9
10 4 -0.29530769 10
我希望输出表如下所示:
x y row prey prerow
1 1 0.60697546 1 -0.68600911 2
2 1 -0.68600911 2 -0.53499454 3
3 1 -0.53499454 3 0.05591587 4
4 1 0.05591587 4 NA NA
5 2 0.11937963 5 -0.39951846 6
6 2 -0.39951846 6 0.97430697 7
7 2 0.97430697 7 NA NA
8 3 0.42852135 8 0.27695563 9
9 3 0.27695563 9 -0.29530769 10
10 4 -0.29530769 10 NA NA
我认为这就是您使用data.table所需要的:
计算prey和prerow列的逻辑是什么,为什么有些是NA?
require(data.table)
df <- structure(list(x = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 4L),
y = c(0.60697546, -0.68600911, -0.53499454, 0.05591587, 0.11937963,
-0.39951846, 0.97430697, 0.42852135, 0.27695563, -0.29530769),
row = 1:10), .Names = c("x", "y", "row"), class = "data.frame",
row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"))
dt <- data.table(df, key="x")
dt.out <- dt[, .SD[2:(nrow(.SD)+1)], by=x]
setnames(dt.out, c("x", "prey", "preyrow"))
dt.out <- cbind(dt, subset(dt.out, select=-c(x)))
> dt.out
x y row prey preyrow
1: 1 0.60697546 1 -0.68600911 2
2: 1 -0.68600911 2 -0.53499454 3
3: 1 -0.53499454 3 0.05591587 4
4: 1 0.05591587 4 NA NA
5: 2 0.11937963 5 -0.39951846 6
6: 2 -0.39951846 6 0.97430697 7
7: 2 0.97430697 7 NA NA
8: 3 0.42852135 8 0.27695563 9
9: 3 0.27695563 9 NA NA
10: 4 -0.29530769 10 NA NA