R语言 将列除以上一列[已解决]

wn9m85ua  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(144)

我尝试将数据集中的每一列除以数据集中每一行的前一列,但不是通过硬编码值。例如,如果我有一张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)。
我尝试了滞后,但它适用于列而不是行。

jq6vz3qz

jq6vz3qz1#

如果有多个行,移调将导致问题。另一个没有转置的base R选项(使用稍微扩展的数据集来证明其跨行向量化):

df[-1] / df[-ncol(df)]

或者,如果您想要第一列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)
cbjzeqam

cbjzeqam2#

碱R溶液:

tdf <- t(df)
res <- tdf / c(NA, tdf[-length(tdf)])
res

输入数据:

df <- data.frame(x0 = 5, x1 = 4, x2 = 3)

相关问题