#r
Вопрос:
Я хочу вычесть несколько строк из одной и той же строки в кадре данных.
Например:
Group A B C
A 3 1 2
B 4 0 3
C 4 1 1
D 2 1 2
Вот как я хочу, чтобы это выглядело:
Group A B C
B 1 -1 1
C 1 0 -1
D -1 0 0
Итак, другими словами:
Строка B — Строка A
Строка C — Строка A
Строка D — Строка A
Спасибо!
Ответ №1:
Вот dplyr
решение:
library(dplyr)
df %>%
mutate(across(A:C, ~ . - .[1])) %>%
filter(Group != "A")
Это дает нам:
Group A B C
1: B 1 -1 1
2: C 1 0 -1
3: D -1 0 0
Ответ №2:
Вот подход с базой R:
data[-1] <- do.call(rbind,
apply(data[-1],1,function(x) x - data[1,-1])
)
data[-1,]
# Group A B C
#2 B 1 -1 1
#3 C 1 0 -1
#4 D -1 0 0
Данные:
data <- structure(list(Group = c("A", "B", "C", "D"), A = c(3L, 4L, 4L,
2L), B = c(1L, 0L, 1L, 1L), C = c(2L, 3L, 1L, 2L)), class = "data.frame", row.names = c(NA,
-4L))
Ответ №3:
Мы также rep
могли бы выделить первую строку и вычесть из остальных
cbind(data[-1, 1, drop = FALSE], data[-1, -1] - data[1, -1][col(data[-1, -1])])
-выход
# Group A B C
#2 B 1 -1 1
#3 C 1 0 -1
#4 D -1 0 0