使用不同列

时间:2017-12-04 23:02:53

标签: r

A        B      C       D
a    -0.17   1.98   0.051
b     0.1    1.99   0.001
c    -0.2    0.245  0.003
d     0.25   0      2

我有一个数据框,其中B列包含 - 和+值,因此,如果是 - 值,我想将其对应的CD列乘以( -1),因此我的CD各行将为 -ve

然后,我希望将每个行值的B列与其连续的CD行以及一个新的下行相乘,其总和为C和{{ 1}}。

计算后,最终的数据框应如下所示。

D

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

将最后两列与' B'相乘。列,取abs,将其分配给这些列,然后rbind colSums的' C'和' D'创建新行

df1[3:4] <- abs(df1[3:4] * df1[,2])
rbind(df1, c(A = NA, B= NA, colSums(df1[3:4])))
#     A     B      C       D
#1    a -0.17 0.3366 0.00867
#2    b  0.10 0.1990 0.00010
#3    c -0.20 0.0490 0.00060
#4    d  0.25 0.0000 0.50000
#5 <NA>    NA 0.5846 0.50937

更新

如果数据集是data.table

library(data.table)
setDT(df1)
df1[, (3:4) := abs(.SD*B), .SDcols = 3:4]
rbind(df1, c(A= NA, B= NA, df1[, lapply(.SD, sum), .SDcols = C:D]))

数据

df1 <- structure(list(A = c("a", "b", "c", "d"), B = c(-0.17, 0.1, -0.2, 
0.25), C = c(1.98, 1.99, 0.245, 0), D = c(0.051, 0.001, 0.003, 
2)), .Names = c("A", "B", "C", "D"), class = "data.frame", row.names = c(NA, 
-4L))