Re: [問題] 資料的截取與邏輯判斷

看板Linux作者 (Hiko)時間7年前 (2018/06/28 18:23), 7年前編輯推噓1(100)
留言1則, 1人參與, 7年前最新討論串2/3 (看更多)
用 R 解的話大概會是這樣: # 下載 package 並安裝 (只有第一次執行需要) install.packages("dplyr") # 載入需要的 package library(dplyr) # 讀取你的原始檔 (假設它是 .csv) rawdata <- read.csv([path to yourfile], header = TRUE, stringsAsFactor = FALSE) # 如果是其他格式 # sep 後面填入資料分隔 column 的符號 # rawdata <- read.table([path to yourfile], header = TRUE, stringAsFactor = FALSE, sep = "\t") # 判斷 A_1 A_2 是否相同 (結果存在 con1 這一欄) rawdata <- mutate(rawdata, con1 = A_1 == A_2) # 計算相同的列數 sum(rawdata$con1) # 判斷 A_1 和 A_2 是否是 "./." (結果存在 con2 這一欄) rawdata <- mutate(rawdata, con2 = (A_1 == "./." & A_2 == "./.")) # 計算 A_1 和 A_2 都是 "./." 的列數 sum(rawdata$con2) # A_1 和 A_2 不相同的列數 sum(!rawdata$con1) # 把判定從「是否相同」反過來就好 # 計算 "./." 的總量 isSymbol <- rawdata == "./." # 判斷哪些格子的內容是 "./." numOfSymbol <- rowSums(isSymbol) # 計算每列「是 "./."」的格子總量 啊,打完發現我不是在隔壁版。補個 Linux 點。用 awk 的話其實也滿快的: # 計算 A_1 與 A_2 相同的列數 (若它們分別為第一第二欄) awk '$1 == $2 {i++}END{print i}' [your raw data] # 計算 A_1 與 A_2 都同樣是 ./. 的列數 awk '$1 == "./." && $2 == "./." {i++}END{print i}' [your raw data] # 計算 A_1 與 A_2 不相同的列數 awk '$1 != $2 {i++}END{print i}' [your raw data] # 計算每列中有幾個 "./." awk '{for(i = 1; i <= NF; i++) {if($i == "./.") n++}; \ print n >> "number.txt";}' [your raw data] # 如果要把 "./." 的個數當作一欄併回原檔案 paste [your raw data] number.txt >> newfile.txt ※ 引述《k97231 (AL)》之銘言: : 我現在正在處理一些有關於生物資訊的資料 : 基本上的資料格式長這樣 : ID A_1 A_2 B_1 B_2 …… : 1 0/0 0/0 : 2 0/0 ./. : 3 ./. ./. : 4. 0/0 0/1 : 5. 1/1 0/1 : 6. 0/1 0/1 : …… : 接著我想要做幾件事情 : 依據相同字母的樣本(像是A_1和A_2) : 逐列統計四種欄位的數量 : 1. A_1和A_2相同 : 2. A_1和A_2都一樣是./. : 3. A_1和A_2不一樣 : 4. 以及任一樣本含有./.的欄位數量 : 以上表為例 : A_1和A_2相同的數量是3 (ID1, 3, 6) : 兩行數值都是./.的數量是1 : A_1和A_2不同的列有3 (ID2, 4, 5) : 有任一行數值為./.的數量為2 (ID2, 3) : 然後統計成四個數值這樣並輸出 : 不過有問題的部分是要如何擷取含有特定字串的兩欄 : 並逐行進行邏輯判斷? : 我知道可以利用awk逐行進行擷取並用grep計算數量並輸出 (不過awk和grep的管線順序還沒參透) : 但要如何依據相同字母擷取特定行就不清楚了 : 想問有甚麼指令可以針對首列帶有特定字串的行進行擷取? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.32.9 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1530181420.A.D25.html ※ 編輯: egoweaver (140.109.32.9), 06/28/2018 19:34:17

07/02 22:55, 7年前 , 1F
喔喔 真的好感謝
07/02 22:55, 1F
文章代碼(AID): #1RDBSiqb (Linux)
討論串 (同標題文章)
文章代碼(AID): #1RDBSiqb (Linux)