r语言 - 使用 dplyr 按行位置引用值



我有df有 12 列:

df<-read.table(header=T,text="V1    V2       V3         V4             V5 V6   V7       V8       V9    V10  V11 V12
 A01 10378809 10379882 Contig1401|m.3412 101 -  10378809 10379882 255,0,0  1 1073   0
 A01 10469105 10469293 Contig1755|m.4465  48  + 10469105 10469293 255,0,0  2  188   0
 A01 10469429 10469630 Contig1755|m.4465   5  + 10469429 10469630 255,0,0  NA  201  0")

首先,我想按重叠群对它们进行分组,然后为第 12 列生成以下值。我想出了如何使用dplyr做到这一点,但我有一些错误。

as.data.frame(df %.% group_by(V4) %.% summarise(V12=apply(df[2], 2, function(x)x-x[1])))

错误:

Error in summarise_impl(.data, named_dots(...), environment()) : attempt to use zero-length variable name .

对于每个组,我想从第二列的第 1 个值中减去第 2 个值。如果只有 2 行(最大-最小),我可以轻松做到这一点,但如果超过 2 行,那么我会错过中间的行。

所以我想我会写一个函数并插入到dplyr但似乎我不能将自己的函数与dplyr一起使用。

这是我需要的最终输出:

V1       V2       V3                V4  V5 V6       V7       V8      V9 V10  V11 V12
1 A01 10378809 10379882 Contig1401|m.3412 101  - 10378809 10379882 255,0,0   1 1073   0
2 A01 10469105 10469293 Contig1755|m.4465  48  + 10469105 10469293 255,0,0   2  188   0
3 A01 10469429 10469630 Contig1755|m.4465   5  + 10469429 10469630 255,0,0  NA  201 324

我想你正在寻找这个:

library(dplyr)
df %.% 
  group_by(V4) %.% 
  mutate(V12 = V2 - V2[1])