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
列包含 - 和+值,因此,如果是 - 值,我想将其对应的C
和D
列乘以( -1
),因此我的C
和D
各行将为 -ve 。
然后,我希望将每个行值的B
列与其连续的C
和D
行以及一个新的下行相乘,其总和为C
和{{ 1}}。
计算后,最终的数据框应如下所示。
D
感谢您的帮助。
答案 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))