在R中重新编码分类变量并重塑数据帧

在R中重新编码分类变量并重塑数据帧,r,R,我有一个包含许多个体等位基因数据的数据框。在两列中列出了一个基因的几个(>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

我有一个包含许多个体等位基因数据的数据框。在两列中列出了一个基因的几个(>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

或者使用
重塑2

library(reshape2)
recast(df1, id.var = 'ID', ID ~ value, length)
数据
df1我们可以转换为“长”格式,获得“计数”,然后再重塑为“宽”

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

或者使用
重塑2

library(reshape2)
recast(df1, id.var = 'ID', ID ~ value, length)
数据
df1解决了我的问题!已接受解决方案。解决了我的问题!这些解决方案已被接受。