3

我有df12 列:

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")

首先,我想按 contig 对它们进行分组,然后为第 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.

对于每个组,我想从第二列的第一个值中减去第二个值。如果只有 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
4

1 回答 1

5

我想你正在寻找这个:

library(dplyr)
df %.% 
  group_by(V4) %.% 
  mutate(V12 = V2 - V2[1])
于 2014-02-18T21:16:40.557 回答