【发布时间】:2017-09-28 11:19:13
【问题描述】:
从以下数据集中,我想从所有后续行(不管它们的标签)中减去标记为“BLK”的行中的值。
label Int_A Int_B Int_C
BLK 10 20 30
SMP 12.5 22.5 35
STD 15 25 40
期望的输出:
label Int_A Int_B Int_C
BLK 10 20 30
SMP 2.5 2.5 5
STD 5 5 10
BLK 行是保持不变还是设置为零都没有关系。
不幸的是,我找到的所有答案都只考虑一个变量,而不是全部。我尝试使用 dplyr 包,尤其是rowwise() 和transmute()(无需保留旧值),但也未能调用整行而不仅仅是某个变量。在基本的 R 中,我也尝试过(但失败了),但使用 dplyr 会更好,因为整个数据集可能存在多个这些部分,并且使用单独的列使用group_by() 很容易进行子集化。
如果您能给我一些建议或所需的代码,我将非常高兴。
【问题讨论】:
-
也许是
apply(df, 2, function(x) c(x[1], x[-1] - x[1]))。 (未经测试。) -
类似
df[] <- lapply(df, function(x) c(x[1], x[-1] - x[1])),但随后排除非数字变量。