【问题标题】:split different length column values to new columns/features [closed]将不同长度的列值拆分为新列/功能[关闭]
【发布时间】:2019-11-07 03:32:43
【问题描述】:

我有一个看起来像这样的数据框

下面数据集中的 f 可以是任何字母数字词,即 f=[A-z]+

                 flags       perf
1   -f1 -arm -loop -f12=2.5  100
2                  -f1 -f44  45
3         -f12=1.89 -f1 -fA  450
4            -stkDump -fA56  590

标志列中的每个项目都是一个字符串。我想将此数据框转换为如下所示:在上面的示例中,某些标志可以具有 一系列值,例如 f12,而其他只是开/关标志。

  f1 arm loop  f12  f44  fA stkDump fA56 perf
1  1  1  1     2.50   0  0   0       0  100
2  1  0  0     0.00   1  0   0       0  203
3  1  0  0     1.89   0  1   0       0   45
4  0  0  0     0.00   0  0   1       1  590

如果有人可以提供帮助,我将不胜感激!

【问题讨论】:

  • @A.Suliman 这是一个错字

标签: python r pandas dplyr tidyr


【解决方案1】:

使用R 和tidyverse;主要技巧是使用tidyr::separate_rows 将flags 转换为基于空间的一列和多行,然后使用stringr::str_extract 提取重要信息,然后再转换回宽格式。

library(dplyr)
library(stringr)
library(tdiyr)
df %>% 
   rownames_to_column(var="id_row")  %>% 
   separate_rows(flags,sep = '\\s') %>% 
   mutate(val=str_extract(flags,'\\d+\\.\\d+'), key=str_extract(flags,'f[0-9A-z]+')) %>% 
   mutate(val=ifelse(is.na(val),1,val)) %>% 
   dplyr::select(-flags) %>% spread(key, val, fill = 0)

    id_row perf f1  f12 f2 f44 f9 fA fA56 fAe
  1      1  100  1  2.5  1   0  1  0    0   0
  2      2   45  1    0  0   1  0  0    0   0
  3      3  450  1 1.89  0   0  0  1    0   0
  4      4  590  0    0  0   0  0  0    1   1

数据

df <- read.table(text ="
                   flags perf
  1   '-f1 -f2 -f9 -f12=2.5'  100
                   2               '-f1 -f44'   45
                   3      '-f12=1.89 -f1 -fA'  450
                   4            '-fAe -fA56'  590
                   ",header = TRUE, stringsAsFactors = FALSE)

【讨论】:

  • 我已经更新了这个问题。请参阅上面的更新。
  • @Obiii 您应该在有人发布答案之前在您的数据集中提供所有可能性,并且如果答案回答了原始问题“OP”,则不应删除勾选标记,因此我对您的问题投了反对票并投票决定关闭。把f改成[A-z]+就可以了。
  • @A 抱歉,我必须取消勾选。我对问题进行了更改并尝试了您的解决方案。它奏效了,我再次勾选了解决方案。谢谢你的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2021-12-02
  • 1970-01-01
  • 2022-12-09
  • 2020-10-01
  • 2020-05-26
  • 1970-01-01
相关资源
最近更新 更多