R 如何分解不同复制的列、条件所采用的字符值
我有一个R 如何分解不同复制的列、条件所采用的字符值,r,R,我有一个data.frame看起来像: mi pos L08.92.s1 L08.92.s2 LD09.911.s1 LD09.911.s2 Storn.s1 Storn.s2 Storn.s3 Storn.s4 Tre 1 snp1 12713760 CC CT CC CC TT TT TT TT CC 2 snp2 8219379 AA
data.frame
看起来像:
mi pos L08.92.s1 L08.92.s2 LD09.911.s1 LD09.911.s2 Storn.s1 Storn.s2 Storn.s3 Storn.s4 Tre
1 snp1 12713760 CC CT CC CC TT TT TT TT CC
2 snp2 8219379 AA AA -- AA AA AA AA AA --
3 snp3 6595215 GG GG GG GG GG -- GG GT GT
4 snp4 42348146 CC CC CC CC CC CA -- CA AA
5 snp5 1809563 GG GG TT TG GG GG GG GG TT
6 snp6 34285723 TT CC -- -- TT TT TT TT CC
7 snp7 21533194 AA AA AG -- AA GG GG GG AG
我希望最终的数据帧如下所示:
mi pos L08.92 LD09.911 Storn Tre
1 snp1 12713760 CC CC TT CC
2 snp2 8219379 AA AA AA --
3 snp3 6595215 GG GG GG GT
4 snp4 42348146 CC CC CC AA
5 snp5 1809563 GG TT GG TT
6 snp6 34285723 HH -- TT CC
7 snp7 21533194 AA AG HH AG
步骤:对于每个样本,具有复制的色谱柱将分解为一个色谱柱。该值将按照以下规则从复制中获取:
- 如果所有复制的值相同,则无变化李>
- 接受值的优先级顺序是:两个相同的字母>两个 不同字母>“--”李>
- 如果复制之间存在两种类型的“homo”值,则更改为“HH”
indx <- gsub("[.][^.]+$", "", colnames(df)[-(1:2)])
lst <- split(colnames(df)[-(1:2)], indx)
Un <- c('AA', 'CC', 'GG', 'TT')
df2 <- df[,1:2]
df2[unique(indx)] <- lapply(lst, function(x)
apply(df[x], 1, function(y) {y1 <- unique(y)
y2 <- y1[y1 %in% Un]
ifelse(length(y2)==0, sort(y1, decreasing=TRUE),
ifelse(length(y2)==2, 'HH', y2))
}))
df2
# mi pos L08.92 LD09.911 Storn Tre
#1 snp1 12713760 CC CC TT CC
#2 snp2 8219379 AA AA AA --
#3 snp3 6595215 GG GG GG GT
#4 snp4 42348146 CC CC CC AA
#5 snp5 1809563 GG TT GG TT
#6 snp6 34285723 HH -- TT CC
#7 snp7 21533194 AA AG HH AG
indx您可以试试
indx <- gsub("[.][^.]+$", "", colnames(df)[-(1:2)])
lst <- split(colnames(df)[-(1:2)], indx)
Un <- c('AA', 'CC', 'GG', 'TT')
df2 <- df[,1:2]
df2[unique(indx)] <- lapply(lst, function(x)
apply(df[x], 1, function(y) {y1 <- unique(y)
y2 <- y1[y1 %in% Un]
ifelse(length(y2)==0, sort(y1, decreasing=TRUE),
ifelse(length(y2)==2, 'HH', y2))
}))
df2
# mi pos L08.92 LD09.911 Storn Tre
#1 snp1 12713760 CC CC TT CC
#2 snp2 8219379 AA AA AA --
#3 snp3 6595215 GG GG GG GT
#4 snp4 42348146 CC CC CC AA
#5 snp5 1809563 GG TT GG TT
#6 snp6 34285723 HH -- TT CC
#7 snp7 21533194 AA AG HH AG
indx