我希望从数据帧中的同一行中减去多行。
例如:
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
谢谢!
发布于 2021-04-16 00:53:19
这是一个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发布于 2021-04-16 00:53:27
这是一种基于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))发布于 2021-04-16 01:18:56
我们还可以replicate第一行并从其余行中减去
cbind(data[-1, 1, drop = FALSE], data[-1, -1] - data[1, -1][col(data[-1, -1])])-output
# Group A B C
#2 B 1 -1 1
#3 C 1 0 -1
#4 D -1 0 0https://stackoverflow.com/questions/67112670
复制相似问题