我有一个包含2177个观测值和44个值的数据框。其中一行特别令人感兴趣,因为我想自己减去这些行的值,因此该行将为零。同时,我需要从所有其他行中减去我用于操作的那些行的值以及要创建的新数据帧。我不确定如何做到这一点。这是我到目前为止所做的,但它不起作用:
NewDataFrame <- OldData[2:44] - OldData[519,]
答案 0 :(得分:4)
我认为最简单的方法是通过sweep()
,但这需要强制转换为矩阵。首先是一些示例数据:
df <- data.frame(A = 1:10, B = 10:1, C = 21:30)
以下是sweep()
版本
m <- data.matrix(df)
sweep(m, 2, m[5, ])
R> sweep(m, 2, m[5, ])
A B C
[1,] -4 4 -4
[2,] -3 3 -3
[3,] -2 2 -2
[4,] -1 1 -1
[5,] 0 0 0
[6,] 1 -1 1
[7,] 2 -2 2
[8,] 3 -3 3
[9,] 4 -4 4
[10,] 5 -5 5
您也可以使用-
执行此操作,但由于R处理矩阵的方式(作为具有维度的向量,并按列填充),您需要对m
进行一些转置:< / p>
t(t(m) - m[5, ])
R> t(t(m) - m[5, ])
A B C
[1,] -4 4 -4
[2,] -3 3 -3
[3,] -2 2 -2
[4,] -1 1 -1
[5,] 0 0 0
[6,] 1 -1 1
[7,] 2 -2 2
[8,] 3 -3 3
[9,] 4 -4 4
[10,] 5 -5 5