我有一個 R 資料框如下:
position 10164.0 10164.1 10192.0 10192.1 10316.0 10316.1 10349.0 10349.1 10418.0 10418.1
4414 1 1 1 1 1 1 1 1 1 1
5295 1 1 1 1 1 1 1 1 1 1
5738 1 1 1 1 1 1 1 1 1 1
5785 1 1 1 1 1 1 1 1 1 1
6392 1 1 1 1 1 1 1 1 1 1
7727 1 1 1 2 1 1 1 1 1 1
8876 1 1 1 2 1 1 1 1 1 1
9018 1 1 1 2 1 0 1 1 1 1
9208 0 1 1 2 1 0 1 2 1 1
9627 0 1 1 2 1 0 1 2 0 1
正如您從第 2 列開始看到的那樣,列名有一個后綴(.0 或 .1)我想計算第 1 列(位置)中的觀察數,然后乘以 2(在這種情況下它會為 20),然后對于后綴 .0 和 .1 之前具有相同名稱的每一列,計算不同觀察值的數量并除以位置*2 的觀察值數量。
到目前為止,這就是我在下面的 R 中使用突擊隊得到的結果:
df = read.table(file = 'df.tsv', sep = '\t', header = TRUE)
df2 = sapply(df, function(x) table(factor(x, levels = c("0", "1", "2"))))
write.table(df2, file='df2.tsv', quote=FALSE, sep='\t')
這給了我:
observations position X10164.0 X10164.1 X10192.0 X10192.1 X10316.0 X10316.1 X10349.0 X10349.1 X10418.0 X10418.1
0 0 2 0 0 0 0 3 0 0 1 0
1 0 8 10 10 5 10 7 10 8 9 10
2 0 0 0 0 5 0 0 0 2 0 0
所需的輸出將是轉置的資料幀,如下所示:
observations 0 1 2
X10164 0.1000 0.9000 0.0000
X10192 0.0000 0.7500 0.2500
X10316 0.1500 0.8500 0.0000
X10349 0.0000 0.9000 0.1000
X10418 0.0500 0.9500 0.0000
uj5u.com熱心網友回復:
在基礎 R 中,您可以執行以下操作:
a <- reshape(df,-1, dir='long', idvar = 'position')[-(1:2)]
t(prop.table(table(stack(a)),2))
values
ind 0 1 2
X10164 0.10 0.90 0.00
X10192 0.00 0.75 0.25
X10316 0.15 0.85 0.00
X10349 0.00 0.90 0.10
X10418 0.05 0.95 0.00
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522752.html
標籤:r多列频率
下一篇:R-基于分組列條件的新行列
