首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从R中的同一行中减去多行

从R中的同一行中减去多行
EN

Stack Overflow用户
提问于 2021-04-16 00:49:25
回答 3查看 35关注 0票数 0

我希望从数据帧中的同一行中减去多行。

例如:

代码语言:javascript
复制
Group   A    B    C
   A    3    1    2
   B    4    0    3
   C    4    1    1
   D    2    1    2

这就是我想要的样子:

代码语言:javascript
复制
Group   A    B    C
   B    1    -1   1
   C    1    0    -1
   D    -1   0    0

因此,换句话说:

B行-A行

行C-行A

行D-行A

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2021-04-16 00:53:19

这是一个dplyr解决方案:

代码语言:javascript
复制
library(dplyr)

df %>% 
      mutate(across(A:C, ~ . - .[1])) %>% 
      filter(Group != "A")

这为我们提供了:

代码语言:javascript
复制
   Group  A  B  C
1:     B  1 -1  1
2:     C  1  0 -1
3:     D -1  0  0
票数 3
EN

Stack Overflow用户

发布于 2021-04-16 00:53:27

这是一种基于R的方法:

代码语言:javascript
复制
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

数据:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2021-04-16 01:18:56

我们还可以replicate第一行并从其余行中减去

代码语言:javascript
复制
cbind(data[-1, 1, drop = FALSE],  data[-1, -1] - data[1, -1][col(data[-1, -1])])

-output

代码语言:javascript
复制
#  Group  A  B  C
#2     B  1 -1  1
#3     C  1  0 -1
#4     D -1  0  0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67112670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档