[英]Split column to multiple columns by using R or python
我有一个这样的值,我想将它拆分为多列
[['Alonso, O.', 'Mizzaro, S.'], ['Gao, H.', 'Barbier, G.', 'Goolsby, R.']]
我只是想要这样的价值
'Alonso, O' 'Mizzaro, S' 'Gao, H' 'Barbier, G' 'Goolsby, R'
我如何在 R 或 Python 中使用 RegEx 来做到这一点?
您可以使用扩展方法
initialValue = [['Alonso, O.', 'Mizzaro, S.'], ['Gao, H.', 'Barbier, G.', 'Goolsby, R.']]
print(initialValue[0])
print(initialValue[1])
x=initialValue[0]
y=initialValue[1]
x.extend(y)
print(x)
这会给你更多的控制,如果你有多个列表要使用,你可以使用循环。
如果正则表达式不是强制性的,这可能会有所帮助。 python
的解决方案。
a = [['Alonso, O.', 'Mizzaro, S.'], ['Gao, H.', 'Barbier, G.', 'Goolsby, R.']]
output = ""
for each in a:
output += " ".join(each)
输出: 'Alonso, O. Mizzaro, S.Gao, H. Barbier, G. Goolsby, R.'
这是在python中执行此操作的方法
cols = [['Alonso, O.', 'Mizzaro, S.'], ['Gao, H.', 'Barbier, G.', 'Goolsby, R.']]
answer_list = [word for lists in cols for word in lists]
answer = ''.join(answer_list)
一个 tidyverse 尝试,在 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 and ]'s。 方括号需要转义,因此双\\; “|” 是或
2.根据字符串“.,”进行拆分。 在这种情况下,该字符串中的点需要转义,因为我们希望将它用作常规点,而不是特殊字符点。
3. unlist,在这种情况下变成五个名字的向量。
我为此使用了 tidyverse 的两个软件包,因此请确保将 tidyverse 安装和加载为一个整体,或者至少是 stringr 和 magrittr
第二部分
其次,我注意到在你的标题中你提到将它分成几列。
如果这是变量中的值,需要将其拆分为五列中的五个值,您可以使用类似的方法。
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. 将char向量转成tibble,在本例中将字符值放入名为“value”的变量中(默认名称)
2. 再次从第一部分开始第 1 步,去掉 ''s、['s 和 ]'s,但这次作为 mutate 调用的一部分
3. 代替str_split,您现在使用separate 将列中的值分隔为多个列上的单独值。 您必须提供一些您认为您的值将被拆分的列名(“into = ”参数),以及要分隔的字符串(与第一部分中的步骤 2 相同的字符串)。
为此,您需要三个额外的 tidyverse 包:tibble、dplyr 和 tidyr
给定字符串s <- "[['Alonso, O.', 'Mizzaro, S.'], ['Gao, H.', 'Barbier, G.', 'Goolsby, R.']]"
,那么你可以使用下面的代码来制作它,即,
r <- unlist(regmatches(s,gregexpr("\\'.*?\\'",s)))
以至于
> cat(r)
'Alonso, O.' 'Mizzaro, S.' 'Gao, H.' 'Barbier, G.' 'Goolsby, R.'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.