[英]Recode categorical variables and reshape dataframe in R
我有一個包含許多人的等位基因數據的數據框。 2 列中列出的基因有多個 (>20) 個獨特的等位基因。 我想將存在 1 個獨特等位基因的副本計為 1,將 2 個副本計為 2,將不存在計為 0。此外,每個人的每個獨特等位基因計數都應在單獨的列中。
我目前的 df 是
ID allele_1 allele_2
01 A01 A02
02 A01 A07
03 A08 A03
04 A103 A01
05 A09 A08
06 A02 A02
07 A08 A08
我希望我的 df 看起來像這樣;
ID A01 A02 A07 A08 A03 A103 A09
01 1 1 0 0 0 0 0
02 1 0 1 0 0 0 0
03 0 0 0 1 1 0 0
04 1 0 0 0 0 1 0
05 0 0 0 1 0 0 1
06 0 2 0 0 0 0 0
07 0 0 0 2 0 0 0
我們可以轉換為“長”格式,獲取“計數”,然后重新整形為“寬”
library(dplyr)
library(tidyr)
df1 %>%
pivot_longer(cols = -ID) %>%
count(ID, value) %>%
pivot_wider(names_from = value, values_from = n, values_fill = list(n = 0))
# A tibble: 7 x 8
# ID A01 A02 A07 A03 A08 A103 A09
# <int> <int> <int> <int> <int> <int> <int> <int>
#1 1 1 1 0 0 0 0 0
#2 2 1 0 1 0 0 0 0
#3 3 0 0 0 1 1 0 0
#4 4 1 0 0 0 0 1 0
#5 5 0 0 0 0 1 0 1
#6 6 0 2 0 0 0 0 0
#7 7 0 0 0 0 2 0 0
或從base R
table
table(rep(df1$ID, 2), unlist(df1[-1]))
或者從reshape2
recast
library(reshape2)
recast(df1, id.var = 'ID', ID ~ value, length)
df1 <- structure(list(ID = 1:7, allele_1 = c("A01", "A01", "A08", "A103",
"A09", "A02", "A08"), allele_2 = c("A02", "A07", "A03", "A01",
"A08", "A02", "A08")), class = "data.frame", row.names = c(NA,
-7L))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.