我有一个csv
,其中包含一个如下所示的变量(在我使用fread
后跟as_tibble
在R中读取它之后):
myvar
<chr>
[]
[u'welcome']
[u'the oil price']
该变量已在Python
中创建,我必须处理此pythonesque列表。
有没有办法使用tidyverse
(dplyr
和其他人)直接将此变量作为正确的字符串(而不是列表)直接读入,而不会过滤掉所有{{1} },[
]和]
?
u'
谢谢!
答案 0 :(得分:1)
如果您的字符串不会包含任何单引号,则可以使用'\\[u\'(.*)\'\\]'
匹配括号后跟&#34; u&#34;并且用单引号括起来的文本以另一个括号结束。然后,您可以通过捕获它来提取单引号之间的内容(下面是myvar3
)
更容易(对我而言)是准确捕获您想要的内容并忽略其余部分,因此\'(.*)\'|.
将匹配单个引号,捕获任意次数的任何字符以将\1
分组到另一个引用。 |.
允许我们不像myvar3
中那样写出确切的模式。
data <- data.frame(myvar = c("[]", "[u'welcome']", "[u'the oil price']"))
within(data, {
myvar2 <- gsub('\'(.*)\'|.', '\\1', myvar)
myvar3 <- gsub('\\[(?:u\'(.*)\')?\\]', '\\1', myvar)
})
# myvar myvar3 myvar2
# 1 []
# 2 [u'welcome'] welcome welcome
# 3 [u'the oil price'] the oil price the oil price