繁体   English   中英

将数据框信息(作为字符列表的列)转换为二进制矩阵

[英]Convert data frame info (a column that's a character list) into binary matrix

我的数据如下所示: 在此处输入图像描述

我想将此数据转换为二进制矩阵并将其附加到当前数据帧。 最有效的方法是什么?

我对 R 很陌生,所以如果这是非常基本的问题,请告诉我。

我尝试提取所有可能的 ID(不带括号),并将其保存为一个名为allIDs的变量,它是一个字符向量。 我用它来向当前数据框添加空列(用“NA”填充)。

在此处输入图像描述

我们可以这样做:首先创建一个虚拟IDs1并删除所有 special 。 然后单独的行将值 TRUE 添加到所有枢轴更宽,然后全部乘以 1 以获得 0 和 1。

library(dplyr)
library(tidyr)

df %>% 
  mutate(IDs1 = IDs,
         IDs1 = gsub("[[:punct:]]", "", IDs1)) %>% 
  separate_rows(IDs1) %>% 
  mutate(value = TRUE) %>% 
  pivot_wider(names_from = IDs1,values_from=value,values_fill=FALSE) %>%  
  mutate(across(-c(Filename, IDs), ~. *1))

输出:

     Filename               IDs             `86I` `114J` `35Y` `126K`
   <chr>                  <chr>           <dbl>  <dbl> <dbl>  <dbl>
 1 20220628_SD02_8908.JPG [86I]               1      0     0      0
 2 20220628_SD02_8909.JPG [86I]               1      0     0      0
 3 20220628_SD02_8910.JPG [86I]               1      0     0      0
 4 20220628_SD02_8911.JPG [86I]               1      0     0      0
 5 20220628_SD02_8912.JPG [86I]               1      0     0      0
 6 20220628_SD02_8913.JPG [86I]               1      0     0      0
 7 20220628_SD02_8914.JPG [86I]               1      0     0      0
 8 20220628_SD02_8915.JPG [86I]               1      0     0      0
 9 20220628_SD02_8916.JPG [114J]              0      1     0      0
10 20220628_SD02_8918.JPG [114J]              0      1     0      0
11 20220628_SD02_8919.JPG [35Y, 114J, 12~     0      1     1      1
12 20220628_SD02_8922.JPG [35Y, 114J, 12~     0      1     1      1
13 20220628_SD02_8923.JPG [35Y, 114J, 12~     0      1     1      1

数据:

structure(list(Filename = c("20220628_SD02_8908.JPG", "20220628_SD02_8909.JPG", 
"20220628_SD02_8910.JPG", "20220628_SD02_8911.JPG", "20220628_SD02_8912.JPG", 
"20220628_SD02_8913.JPG", "20220628_SD02_8914.JPG", "20220628_SD02_8915.JPG", 
"20220628_SD02_8916.JPG", "20220628_SD02_8918.JPG", "20220628_SD02_8919.JPG", 
"20220628_SD02_8922.JPG", "20220628_SD02_8923.JPG"), IDs = c("[86I]", 
"[86I]", "[86I]", "[86I]", "[86I]", "[86I]", "[86I]", "[86I]", 
"[114J]", "[114J]", "[35Y, 114J, 126K]", "[35Y, 114J, 126K]", 
"[35Y, 114J, 126K]")), class = "data.frame", row.names = c("18", 
"19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", 
"30"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM