从数据框中行的每个元素中减去行的最小值,

时间:2020-10-12 10:20:27

标签: r

我有一个数据框

import transformers #it is important to load the library before checking!
import os
os.environ['TRANSFORMERS_CACHE']

我要创建2个数据框,其值分别为:

  1. 从该行的每个元素中减去该行中的 A B C D r1 10 7 19 11 r2 5 5 7 8 r3 12 9 13 11 r4 8 10 11 9 值,
  2. 从该列的每个元素中减去该列中的min值。

我有专栏的功能

min

我得到的结果如下,

d1=transform(d,A=A-(min(A)),B=B-(min(B)),C=C-(min(C)),D=D-(min(D)))

我应该使用什么函数来获取行的结果

> d1
  A B  C D

r1 5 2 12 3

r2 0 0  0 0

r3 7 4  6 3

r4 3 5  4 1

(从该行的每个项目中减去该行的> d2 A B C D r1 0 2 9 1 r2 0 5 2 3 r3 1 3 2 0 r4 0 7 3 1 值)

3 个答案:

答案 0 :(得分:1)

如果我理解了您的问题,则可以在数据框的转置上运行“列函数”。转置后的数据帧会变成矩阵,因此您需要将其转回一个数据帧:

transpose <- as.data.frame(
  t(yourDataFrame)
)

d2 <- transform(transpose ,A=A-(min(A)),B=B-(min(B)),C=C-(min(C)),D=D-(min(D)))

顺便提一下这个问题。我建议您阅读如何创建最小的,可复制的示例https://stackoverflow.com/help/minimal-reproducible-example

答案 1 :(得分:1)

您还可以将apply功能与:

一起使用
# 1 for the rows
apply(d, 1, function(x){x-min(x)}
# 2 for the columns 
apply(d, 2, function(x){x-min(x)}

答案 2 :(得分:0)

我们可以使用pmin

d - do.call(pmin, d)

或按列

library(matrixStats)
d - colMins(as.matrix(d))[col(d)]
相关问题