我正在尝试在R中的数据帧中相互添加和减去行,但没有从自身添加和减去行。例如,如果数据集由
给出data <- data.frame(x=c(1,2,5), y=c(3,4,8), z=c(5,6,10))
我正在尝试从1中添加第1行,从1中减去3行,从2中添加第3行。我试图创建一个适用于任何数据集的循环。
我尝试了apply
,sapply
和sweep
,但是没有运气。我可以使用一整套方法吗?
谢谢
答案 0 :(得分:1)
将第x
列除以x-1
,除非x == 1
减去最后一列。
sapply(1:ncol(data), function(x) if (x == 1) {
data[, x] - data[, ncol(data)]
} else {
data[, x] - data[, x-1]})
# [,1] [,2] [,3]
#[1,] -4 2 2
#[2,] -4 2 2
#[3,] -5 3 2
如果您真的想减去行,则可以采用类似的方法。
t(sapply(1:nrow(data), function(x) if (x == 1) {
data[x, ] - data[nrow(data), ]
} else {
data[x, ] - data[x-1, ]}))
# x y z
#[1,] -4 -5 -5
#[2,] 1 1 1
#[3,] 3 4 4
答案 1 :(得分:0)
添加三个新列怎么办?
data$sub1 <- data$y - data$x
data$sub2 <- data$x - data$z
data$sub3 <- data$z - data$y
data
x y z sub1 sub2 sub3
1 1 3 5 2 -4 2
2 2 4 6 2 -4 2
3 5 8 10 3 -5 2