有没有一种方法可以根据柱的位置系统地划分柱? 例如,数据框如下所示:

df <- data.frame(id = ('a1', 'a2'), a = c(1, 0), b = c(4,0), c = c(4, 3), d = c(5, 10))
a b c d
1 4 4 5
0 0 3 10

我想要得到:

a b c d div_c div_b div_a
1 4 4 5 0.8 1 0.25
0 0 3 10 0.3 0 NaN

换句话说,从最后一列开始作为分子,前一列作为分子,直到第一列是分子. 我知道我可以做到

df %>% mutate(div_c = c/d, div_b = b/c, div_a = a/b)

但是,我的列比上面的示例多得多,所以我想知道是否有更好的方法来完成这项工作,而不是输入每个新的计算.

我try 了变异和交叉,但这只有在操作/功能是一致的而不是移动的目标时才有效.

提前谢谢您!

推荐答案

你可以做

> cbind(df, div=(df[-c(1, ncol(df))]/df[-(1:2)])[, rev(seq_len(ncol(df) - 2L))])
  id a b c  d div.c div.b div.a
1 a1 1 4 4  5   0.8     1  0.25
2 a2 0 0 3 10   0.3     0   NaN

Data:

> dput(df)
structure(list(id = c("a1", "a2"), a = c(1, 0), b = c(4, 0), 
    c = c(4, 3), d = c(5, 10)), class = "data.frame", row.names = c(NA, 
-2L))

R相关问答推荐

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

删除facet_wrap标签之间的水平线

以R中的正确顺序将日期时间字符列转换为posixct

在使用ggroove后,将图例合并在gplot中

在R中替换函数中的特定符号

在另一个函数中调用ggplot2美学

在R中使用数据集名称

从外部文件读取多个值作为字符向量

有效识别长载体中的高/低命中

迭代到DataFrame列并获得成对的值列表(col1->;col2、col2->;col3、col3->;col4等)的正确方法.

使用带有OR条件的grepl过滤字符串

使用rvest从多个页面抓取时避免404错误

基于数据集属性将科分配给物种

如何创建累加到现有列累计和的新列?

手动指定从相同数据创建的叠加图的 colored颜色

远离理论值的伽马密度曲线下面积的近似

如何在GALT包的函数&geom_x样条线中调整线宽

在使用ggplot2的情况下,如何在使用coord_trans函数的同时,根据未转换的坐标比来定位geom_瓷砖?

如何使用ggsurvfit包更改风险表中的标签名称?

在R中查找多列中的字符串