我有一个这样的值,我想把它分成多个列
[['Alonso, O.', 'Mizzaro, S.'], ['Gao, H.', 'Barbier, G.', 'Goolsby, R.']]
我只是想要这个值
'Alonso, O' 'Mizzaro, S' 'Gao, H' 'Barbier, G' 'Goolsby, R'
怎么用R或Python中的正则表达式来做呢? 问题来源StackOverflow 地址:/questions/59384836/split-column-to-multiple-columns-by-using-r-or-python
在R: 第一部分 我假设这个值是一个向量中的字符值。 所以,我把你的值装入一个向量,像这样:
char <- "[['Alonso, O.', 'Mizzaro, S.'], ['Gao, H.', 'Barbier, G.', 'Goolsby, R.']]"
然后,如果你想把它们分成单独的名字,产生一个包含五个名字作为单独值的向量,你可以这样做:
char %>%
str_replace_all("'|\\[|\\]", "") %>%
str_split("\\., ") %>%
unlist()
输出:
[1] "Alonso, O" "Mizzaro, S" "Gao, H" "Barbier, G" "Goolsby, R."
它的作用是: 1. 使用字符串“'|[|]”删除所有“s”、['s和]'s。方括号需要转义,因此需要双;|是OR 2. 基于字符串分割”。”。在本例中,字符串中的点需要转义,因为我们希望将其用作常规点,而不是特殊字符点。 3.取消列表,在本例中为包含五个名称的向量。 为此,我使用了来自tidyverse的两个包,因此请确保将tidyverse作为一个整体安装和加载,或者至少安装stringr和magrittr 第二部分 其次,我注意到你在你的标题中提到了把它分成几栏。 如果这是一个变量中的值,需要分成5列中的5个值,您可以使用类似这样的东西。
char %>%
enframe(name = NULL) %>%
mutate(value = str_replace_all(value, "'|\\[|\\]", "")) %>%
separate(value, into = c("name1", "name2", "name3", "name4", "name5"), sep = "\\., ")
输出:
# A tibble: 1 x 5
name1 name2 name3 name4 name5
<chr> <chr> <chr> <chr> <chr>
1 Alonso, O Mizzaro, S Gao, H Barbier, G Goolsby, R.
这段代码解释道: 1. 将字符向量转换为tibble,在本例中,将字符值放在名为“value”的变量中(默认名称) 2. 同样是第一部分的第1步,删除“s”、“['s '和's ',但这次是作为mutate调用的一部分 3.您现在使用的是separate,而不是str_split,它将一个列中的值分隔为多个列上的不同值。您必须提供一些列名,您认为您的值将被分割到其中(“into =”参数),以及要分割的字符串(与第一部分中的步骤2相同的字符串)。 为此,您需要另外三个tidyverse包:tibble、dplyr和tidyr
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。