我该如何过滤我的数据帧?

时间:2014-02-17 07:12:37

标签: r parsing

我有一个有几列的df(见下文)

 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

我该怎么办?

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,201 0

基本上如果它是唯一的id(例如Contig1401|m.3412),那么就不要做任何事情。如果id是非唯一的(即与之后的下一行或下一行共享,依此类推......例如Contig1755|m.4465),那么将v11的值粘贴到前一行?我尝试了很多但找不到方法。任何想法都表示赞赏。

2 个答案:

答案 0 :(得分:0)

如果您只对一列感兴趣,可以执行以下操作:

df <- data.frame(x=sample(letters, size=50, replace=T), y=sample(50))

aggregate(df$y, by=list(df$x), FUN=paste)
   Group.1              x
1        a      41, 6, 15
2        b      39, 37, 5
3        c         48, 50
4        e         20, 26
5        f          25, 2
6        g              1
7        h             29
8        i         31, 44
9        j             43
10       k 33, 45, 19, 46
11       l         11, 28
12       o             38
13       p      42, 8, 32
14       q          3, 21
15       r  47, 4, 34, 24
16       s              7
17       t     18, 17, 35
18       u     23, 13, 27
19       w             16
20       x     12, 36, 10
21       y     30, 22, 14
22       z      9, 49, 40

在您的情况下,将df$x替换为df$V1,将df$y替换为df$V11

答案 1 :(得分:0)

dplyr如何做到这一点。注意,这使用每个非聚合变量的第一个值(即不是V4或V11),并且每V4卷起V11:

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

require(dplyr)

df.2<-group_by(df, V4) %.%
  summarise(V1=V1[1],V2=V2[1],V3=V3[1],V5=V5[1],V6=V6[1],V7=V7[1],
  V8=V8[1],V9=V9[1],V10=V10[1],V11=paste0(unlist(V11),collapse=","),V12=V12[1])

data.frame(df.2)

                 V4 V1       V2       V3  V5 V6       V7       V8 V9 V10
1 Contig1401|m.3412  1 10378809 10379882 101  1 10378809 10379882  1   1
2 Contig1755|m.4465  1 10469105 10469293  48  2 10469105 10469293  1   2
V11 V12
1    1073   0
2 188,201   0