我正在尝试上传一个CSV文件,该文件具有各种格式的常规格式的数据(列名,然后是数字或字符串),以及一列具有[“ x”]格式的各种长度的数字的列表(即第1行= [“ 111”,“ 222”],第2行= [“ 333”],第3行= [“ 555”,“ 666”,“ 777”]。如何上传该数据,以便用它进行分析吗?
当我将其转换为字符串时,数据返回为“ [\“ x \”]“。当我把它变成一个因素时,它看起来像CSV中的格式。但是我仍然无法使用[“ present。
答案 0 :(得分:0)
您好,您可以使用stringr
包从方括号中取出数字。我认为出现\
的原因是因为它被用作转义字符以逃避第二组""
。无论如何,这将简化它,
我做了一些丑陋的数据
df <- data.frame(x = c(1, 2, 3),
y = c('[\\"111\\", \\"222\\"]', '[\\"333\\"]', '[\\"555\\", \\"666\\", \\"777\\"]'))
df
x y
1 1 [\\"111\\", \\"222\\"]
2 2 [\\"333\\"]
3 3 [\\"555\\", \\"666\\", \\"777\\"]
现在只需使用来自stringr::str_extract_all
的一些正则表达式,我们就可以连续捕获所有出现的1个或多个数字。
df$y <- stringr::str_extract_all(df$y, "(\\d+)")
(\\d+)
只是说我想获取1位或更多位数字的组。
这将产生一个嵌套列表,其中不包含\
。
x y
1 1 111, 222
2 2 333
3 3 555, 666, 777
它们仍然是字符串,因此,如果要评估数字,则需要执行以下操作:
> eval(parse(text = df$y[[1]][1])) / 111
[1] 1
对于整个数据框,您可以考虑取消嵌套并创建一个新列(或覆盖原始列以更改数据类型并将字符串转换为valuate(able)表达式,为此,我们可以使用一些{{1 }}(tidyverse
和tidyr::unnest
)
dplyr::mutate