如何在数据帧中将多个字符串列替换为二进制值(0和1)?

2024-05-04 13:44:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一个二进制矩阵,但首先我需要将多个字符串列替换为二进制值(0和1)。我试图在R和python中获得它,但代码不起作用。我想知道是否有人能帮我

我有一个29584行x 982列的矩阵,similar like

  G       X4646466.555  X564737373.455  X737347474.56   
0 add     bp_ggfgfgg    
1 fgr     bb_jhfjfjf    bpp_fhfhfhf     bb_jfjfjf
2 dfr
3 tth                   bb_jdjfjdd
4 dee     bp_djdjdd
5 ee                    bp_dhsdhdh
6 ff                    bb_hfhfhf       bpp_dfhdhdhd
...

对于以X开头的每一列,都有不同的字符串值。这些值从bb_u3;、bpp_3;和bp_3;开始。此外,还缺少数据(空白)。我希望将以X开头的每列(或除G以外的所有列)中的所有字符串值替换为1,并将以X开头的列中缺少的数据替换为0

I am attaching a imagen of the dataframe


Tags: 数据字符串代码add二进制矩阵likesimilar
2条回答

我们可以使用

library(dplyr)
df2 <- df1 %>%
    mutate(across(starts_with('X'), ~ +(!is.na(.)))

我们可以将mutateacrosscase_when一起使用:

library(dplyr)
df %>% 
    dplyr::mutate(across(starts_with("X"), ~case_when(is.na(.) ~ 0,
                                                TRUE ~ 1)))
# A tibble: 7 x 5
  G     X4646466.555 X564737373.455 X737347474.56    X5
  <chr>        <dbl>          <dbl>         <dbl> <dbl>
1 add              1              0             0     0
2 fgr              1              1             1     0
3 dfr              0              0             0     0
4 tth              1              0             0     0
5 dee              1              0             0     0
6 ee               1              0             0     0
7 ff               1              1             0     0

library(tidyverse)
df1 <- df[,-1] %>% 
    modify(~ ifelse(is.na(.), 0,1))
    
cbind(df[,1],df1)

相关问题 更多 >