平面图和拆分列表项

时间:2018-04-05 20:35:11

标签: r

我有数据,例如 -

foo
bar, john
bloggs
smith
william
jones, doug

我想把它们变成一个列表,其中元素是foo, bar, john, bloggs等等。我试图使用purrr包中的平面图,它给了我一个无用的数据帧混乱。我也试过使用这样的列表,非常有用给了我开始的列表。

var_list = list()
i = 1
for (variable in variables_list) {
    split = strsplit(variable, ',')
    for (s in split) {
        var_list[[i]] = trimws(s)
        i = i + 1
    }
}

在Java中,我可以这样做:

list.stream()
        .flatMap(s -> Stream.of(s.split(",")))
        .map(String::trim)
        .collect(Collectors.toList());

在一条线上完成这一切。作为次要的事情,由于R自己作为一种函数式语言,是否有可能直接将数据平面映射到像Java一样的单行内容?

3 个答案:

答案 0 :(得分:2)

R中的大多数函数都是矢量化的,因此您无需显式映射,例如,您可以这样做

trimws(unlist(strsplit(unlist(strsplit(x, "\n")), ",")))
# [1] "foo"     "bar"     "john"    "bloggs"  "smith"   "william" "jones"  
# [8] "doug" 

,其中

x<-"foo
bar, john
bloggs
smith
william
jones, doug"

答案 1 :(得分:1)

您可以使用unlist展平列表:

> x <- c("foo", "bar, john", "bloggs", "smith", "william", "jones, doug")
> x
[1] "foo"         "bar, john"   "bloggs"      "smith"       "william"     "jones, doug"
> unlist(strsplit(x, ","))
[1] "foo"     "bar"     " john"   "bloggs"  "smith"   "william" "jones"   " doug" 

答案 2 :(得分:0)

不确定平面图是什么,但如果您的数据存在于文本文件中,则可以执行以下操作:

pth <- "/path/to/file.txt"
gsub(",","",scan(pth,""))
Read 8 items
[1] "foo"     "bar"     "john"    "bloggs"  "smith"   "william" "jones"   "doug"

使用gsub函数提取部分并删除逗号。

如果您确实希望将输出放在列表而不是矢量中,则将其拆分:

split(x,seq_along(x))