我尝试将数据集中的每一列除以数据集中每一行的前一列,但不是通过硬编码值。例如,如果我有一张table:
DATE 0 1 2 07/01/2022 5 4 3 08/01/2022 4 3 2 09/01/2022 2 2 1
我想将标记为0到2的行除以前面的数字(第一个数字为NA)。我尝试了滞后,但它适用于列而不是行。
jq6vz3qz1#
如果有多个行,移调将导致问题。另一个没有转置的base R选项(使用稍微扩展的数据集来证明其跨行向量化):
df[-1] / df[-ncol(df)]
或者,如果您想要第一列NA:
NA
cbind(A = NA, df[-1] / df[-ncol(df)])
输出:
A B C D E 1 NA 0.8000000 0.7500000 0.6666667 0.5000000 2 NA 0.8333333 0.8000000 0.7500000 0.6666667 3 NA 0.8571429 0.8333333 0.8000000 0.7500000
或者使用特定的列(每个注解)。此处,仅列2至4:
cols <- 2:4 df[cols] / df[cols - 1] # B C D #1 0.8000000 0.7500000 0.6666667 #2 0.8333333 0.8000000 0.7500000 #3 0.8571429 0.8333333 0.8000000
数据
df <- data.frame(A = 5:7, B = 4:6, C = 3:5, D = 2:4, E = 1:3)
cbjzeqam2#
碱R溶液:
tdf <- t(df) res <- tdf / c(NA, tdf[-length(tdf)]) res
输入数据:
df <- data.frame(x0 = 5, x1 = 4, x2 = 3)
2条答案
按热度按时间jq6vz3qz1#
如果有多个行,移调将导致问题。另一个没有转置的base R选项(使用稍微扩展的数据集来证明其跨行向量化):
或者,如果您想要第一列
NA
:输出:
或者使用特定的列(每个注解)。此处,仅列2至4:
数据
cbjzeqam2#
碱R溶液:
输入数据: