2017-01-10 69 views
2

如何我看起來工作數據(它是一個SNP數據):如何將特定函數應用於R的範圍(但將其應用於每個列)?

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

我怎麼想以後的情況下2(第3行由於多個字符列2和所有列分成刪除它成爲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 

情況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 

我做同樣的對所有列 問題,我想做的事情它爲所有列 潛在的解決方案: 不同類型的循環,但我不能使它的工作。 任何幫助將不勝感激

+0

你應該添加數據到您的問題:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example;至少對於第二種情況,預期產出也會很好。 – scoa

+0

注意。我將添加示例文件如何看起來 –

回答

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完全量化的解決方案

+0

偉大的代碼! @DavidArenburg –

+0

這是解決方案! –

+0

只是一個額外的問題。這對我很有用,但是如果我有其他更長的值,如名稱(具有引用名稱的附加列)的列,我可以將它保存爲矩陣中的行名嗎? –

相關問題