假設我有一個資料表如下:
ID1 ID2 ID3
a a b
a b b
b b b
c c c
c c d
c d d
d e
d e
e
然后我想將其轉換為如下結構:
Samples ID1 ID2 ID3
a 2 1 0
b 1 2 3
c 3 2 1
d 2 1 2
e 1 0 2
你們中的任何人都可以幫助我使用 R 或 bash 代碼來實作這種轉換嗎?
uj5u.com熱心網友回復:
試試下面的 R 代碼
> table(stack(df))
ind
values ID1 ID2 ID3
a 2 1 0
b 1 2 3
c 3 2 1
d 2 1 2
e 1 0 2
資料
> dput(df)
structure(list(ID1 = c("a", "a", "b", "c", "c", "c", "d", "d",
"e"), ID2 = c("a", "b", "b", "c", "c", "d", NA, NA, NA), ID3 = c("b",
"b", "b", "c", "d", "d", "e", "e", NA)), class = "data.frame", row.names = c(NA,
-9L))
uj5u.com熱心網友回復:
使用tidyverse-將選項重新整形為“長”格式pivot_longer,使用 將其count重新整形為“寬”格式pivot_wider
library(dplyr)
library(tidyr)
df %>%
pivot_longer(everything(), values_drop_na = TRUE, values_to = 'Samples') %>%
count(name, Samples) %>%
pivot_wider(names_from = name, values_from = n, values_fill = 0)
-輸出
# A tibble: 5 × 4
Samples ID1 ID2 ID3
<chr> <int> <int> <int>
1 a 2 1 0
2 b 1 2 3
3 c 3 2 1
4 d 2 1 2
5 e 1 0 2
資料
df <- structure(list(ID1 = c("a", "a", "b", "c", "c", "c", "d", "d",
"e"), ID2 = c("a", "b", "b", "c", "c", "d", NA, NA, NA), ID3 = c("b",
"b", "b", "c", "d", "d", "e", "e", NA)), class = "data.frame",
row.names = c(NA,
-9L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/364202.html
上一篇:如何使用sjPlot::plot_model僅顯示lmer模型的固定效應估計
下一篇:根據多個變數添加組名
