如何在R中彼此添加/减去行

时间:2019-11-05 22:21:11

标签: r

我正在尝试在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行。我试图创建一个适用于任何数据集的循环。 我尝试了applysapplysweep,但是没有运气。我可以使用一整套方法吗?

谢谢

2 个答案:

答案 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