子集数据框并将行与指定值进行比较

问题描述 投票:0回答:1

我有一个下面表格的数据框df,并希望将Visit = C1的“频率”与每个ID的每个突变的其他访问的每个值进行比较。因此,对于ID = A1和TP53 H168QH,每次访问(第1-6行)将与C1(第2行; 0.0028148)进行比较。

head(df)
   ID Visit       Mutation Frequency
1  A1  Base    TP53 H168QH 0.4115056
2  A1    C1    TP53 H168QH 0.0028148
3  A1    C3    TP53 H168QH 0.0005448
4  A1    C5    TP53 H168QH 0.0027240
5  A1    C7    TP53 H168QH 0.0063560
6  A1    C9    TP53 H168QH 0.0023608
7  A1  Base     TP53 G266R 0.0017252
8  A1    C1     TP53 G266R 0.0071732
9  A1    C5     TP53 G266R 0.0046308
10 A1  Base     TP53 I195T 0.0968836
11 A1    C1     TP53 I195T 0.0805396
12 A1    C3     TP53 I195T 0.1301164
13 A1    C5     TP53 I195T 0.0004540
14 A1    C7     TP53 I195T 0.0025424
15 A1    C9     TP53 I195T 0.0007264

我已经能够在dplyr上取得一些进展并且遇到了接近我想要的滞后函数但是我想选择比较器作为C1而不是比较连续的行。

df %>% group_by(ID, Mutation) %>% 
mutate(Difference=100*(Frequency-lag(Frequency,
order_by=Mutation))/lag(Frequency, order_by=Mutation))

任何人都可以建议一种接近这个的方法吗?

谢谢,

戴夫

r dplyr
1个回答
1
投票

干得好。由于我们使用了两次值,我创建了一个带有C1值的列,然后在计算中使用它,然后去除它

df %>% group_by(ID, Mutation) %>% 
  mutate(C1F = Frequency[Visit=="C1"], 
         Difference = 100*(Frequency-C1F)/C1F, 
         C1F = NULL)
© www.soinside.com 2019 - 2024. All rights reserved.