我有数据,例如 -
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一样的单行内容?
答案 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))