我有一个有几列的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的值粘贴到前一行?我尝试了很多但找不到方法。任何想法都表示赞赏。
答案 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