簡體   English   中英

如何將特定函數應用於 R 中的列范圍(但僅將其應用於每一列)?

[英]How to apply specific function to range of columns(but applying it to every column alone) in R?

我處理的數據看起來如何(它是 SNP 數據):

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

我對所有列問題都這樣做,我想為所有列潛在解決方案這樣做:不同類型的循環,但我無法使其工作。 任何幫助將不勝感激

這是一個完全矢量化的解決方案,以達到您想要的輸出

## 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM