2

私が扱うデータはどのように見えますか (これは SNP データです):

AA CC CA GG  
GA CA CC GG  
GG CCCC CAA GG  
CA GG CC GC 

ケース2の後にどのようになりたいか(複数の文字列2のために行3が削除され、すべての列が2つに分割されます)

A A C C C A G G  
G A C A C C G G  
C A G G C C G C

case 1
今使っているもの

mydata <- mydata[which(!nchar(as.character(mydata[,5]))>2),]
mydata <- mydata[which(!nchar(as.character(mydata[,6]))>2),]
mydata <- mydata[which(!nchar(as.character(mydata[,7]))>2),]

なりたい

mydata <- mydata[which(!nchar(as.character(mydata[,5:7]))>2),]

問題は、関数がすべての列を 5:7 でカウントし、すべての行を削除していることです。私は同じことを望んでいますが、それらを一緒にするのではなく、列ごとに実行します。
ケース 2 これはライブラリを使用する私のコード

library(dplyr)
library(splitstackshape)

列ごとに実行すると、セルが分割されます。これは列 6 です。

data2$V6 = as.character(data2$V6)
data2 <- cSplit(data.frame(data2 %>% rowwise() %>%
mutate(V6 = V6, V6n = paste(unlist(strsplit(V6, "")),
collapse = ','))), "V6n", ",")
data2$V5 <- NULL

すべての列の問題に対して同じことを行います。すべての列の潜在的な解決策に対して実行したいのですが、さまざまな種類のループですが、機能させることはできません。どんな助けでも大歓迎です

4

1 に答える 1

2

これは、目的の出力に到達するための完全にベクトル化されたソリューションです

## Convert all the rows into a single vectors
tmp <- do.call(paste0, mydata)

## Remove too long rows, split and rbind
do.call(rbind, strsplit(tmp[nchar(tmp) == 2 * ncol(mydata)], "", fixed = TRUE))
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
# [1,] "A"  "A"  "C"  "C"  "C"  "A"  "G"  "G" 
# [2,] "G"  "A"  "C"  "A"  "C"  "C"  "G"  "G" 
# [3,] "C"  "A"  "G"  "G"  "C"  "C"  "G"  "C" 

これは になりますが、必要に応じmatrixて簡単に に変換できますdata.frame

于 2017-01-10T12:22:58.153 に答える