Как добавить / вычесть строки друг от друга в R - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь складывать и вычитать строки друг из друга в кадре данных в R, но без сложения и вычитания строки из себя. Например, если набор данных задан как

data <- data.frame(x=c(1,2,5), y=c(3,4,8), z=c(5,6,10))

Я пытаюсь добавить / вычесть строку 2 из 1, 3 из 1 и 3 из 2. Я пытаюсь создать цикл, который будет работатьдля любого набора данных. Я пробовал apply, sapply и sweep, но без удачи. Есть ли пакет методов, которые я могу использовать?

Спасибо

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Вычитание 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

Если вы действительно хотите вычесть строки, aПодобный подход может быть использован.

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
0 голосов
/ 06 ноября 2019

как насчет добавления трех новых столбцов?

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...