資料的截取與邏輯判斷 - Linux

Andrew avatar
By Andrew
at 2018-06-28T18:23

Table of Contents

用 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的管線順序還沒參透)
: 但要如何依據相同字母擷取特定行就不清楚了
: 想問有甚麼指令可以針對首列帶有特定字串的行進行擷取?

--
Tags: Linux

All Comments

Oliver avatar
By Oliver
at 2018-07-01T15:31
喔喔 真的好感謝

尋找空的資料夾或是非空的資料夾?

Ina avatar
By Ina
at 2018-06-21T10:11
不知道程式怎麼寫的 有一個帳號下面貌似出現大量空白資料夾 但是沒辦法確認這些資料夾內容 直接使用 du -sh 檢查的話有看到佔用空間約 1.4G 但是由於資料夾數量龐大 而且分很多層 不知道這個空間是空的資料夾堆積起來的大小 還是裡面真的有東西 目前找到的都是搜尋空的資料夾 ex. find /tmp - ...

請問現在 Manjaro 安全性還是很低嗎?

Joe avatar
By Joe
at 2018-06-20T20:58
除了以前他們什麼認證因為某些原因過期的問題 看了網路上某些開發者認為他們存在最大的問題 那就是安全性更新因為他們的更新方式導致問題 安全性更新並沒辦法像其他發行版即時得到更新 但最近看了他們開發團隊變更了安全性更新流程 重要的安全性更新會直接進到 Stable Branch裡 而那位叫 Allen 的開發者也 ...

GTK+ UVC Viewer(Guvcview) Snap 軟體包

Ivy avatar
By Ivy
at 2018-06-19T18:47
經過數週的開發與測試,我很高興地宣佈GTK+ UVC Viewer(即 Guvcview)的非官方Snap 軟體包的打包工作已經告一段落。 https://snapcraft.io/guvcview Guvcview為一套由Paulo Assis所開發的USB影像類別(USB Video Class(UV ...

如何關閉 crontab 觸發 mail

William avatar
By William
at 2018-06-19T15:04
各位好,crontab 如果沒有指定 output,則當有訊息 output 的時候他會觸發 mail 寄信給 root 而 root mail 沒有指定的話會變成 maildrop,吃掉很多硬碟空間 但發現即便 output 有指定到 /dev/null,該 crontab 本身有 echo 內容的話也會觸 ...

要如何查資料夾所有文件檔裡面的特定字

Blanche avatar
By Blanche
at 2018-06-19T13:08
請問可以用什麼指令所以查詢特定資料夾裡面所以文字檔的特定字呢? 而文字檔有可能有txt, 或者沒有副檔名, 然後也可以查pdf file. - ...