我有一个看起来与此非常相似的数据框(基本上是一张城市表及其在地图上的坐标。请注意,坐标是X,Y值的列表。
let alamofireSourceWihoutNils = alamofireSource.compactMap { $0 }
现在,我可以创建仅包含城市和坐标的新表。我真的希望X和Y值成为单独的列。这就是我尝试过的
foo <- data.frame(
city = c("chicago", "new york"),
coordinate = I(list(list(10, 15), list(20, 25))),
myabbr = c("chi", "ny")
)
bar <- subset(foo, select=c("city", "coordinate"))
我不确定该怎么做。
答案 0 :(得分:5)
为您提供的另一个选择是,使用listCol_w
中的splitstackshape
。
library(splitstackshape)
listCol_w(foo, "coordinate")
# city myabbr coordinate_fl_1 coordinate_fl_2
#1: chicago chi 10 15
#2: new york ny 20 25
答案 1 :(得分:2)
您可以使用list[[index]]
访问列表元素。您可以用这种方式提取它:
foo <- data.frame(city=c("chicago", "new york"), coordinate=I(list(list(10, 15), list(20,25))), myabbr=c("chi", "ny"))
foo$coordinate_x = foo$coordinate[[1]]
foo$coordinate_y = foo$coordinate[[2]]
foo
答案 2 :(得分:2)
您需要的是从列表列“坐标”中提取X和Y元素。像R中的list[[index]]
一样完成列表提取。
即
foo <- data.frame(city=c("chicago", "new york"), coordinate=I(list(list(10, 15), list(20,25))), myabbr=c("chi", "ny"))
bar <- subset(foo, select=c("city", "coordinate"))
bar$x <- bar$coordinate[[1]]
bar$y <- bar$coordinate[[2]]
bar$coordinate <- NULL
答案 3 :(得分:2)
这里的想法是unlist
每行坐标,cbind
与城市,即
cbind(city = as.character(bar$city),
setNames(data.frame(apply(bar, 1, function(i)unlist(i$coordinate))),
c('coordinate1', 'coordinate2')))
给出,
city coordinate1 coordinate2 1 chicago 10 20 2 new york 15 25
答案 4 :(得分:2)
我们可以取消列出该列并绑定回原始数据框,请尝试:
cbind(foo, do.call(rbind, lapply(foo$coordinate, unlist)))
# city coordinate myabbr 1 2
# 1 chicago 10, 15 chi 10 15
# 2 new york 20, 25 ny 20 25
答案 5 :(得分:1)
您也可以尝试tidyverse
library(tidyverse)
foo %>%
mutate(coordinate=map(coordinate,~unlist(.) %>%
paste(., collapse=","))) %>%
separate(coordinate, into = c("x", "y"), sep=",")
# A tibble: 2 x 4
city x y myabbr
<fct> <chr> <chr> <fct>
1 chicago 10 15 chi
2 new york 20 25 ny
这给您预期的结果
.Last.value %>%
select(-myabbr)
答案 6 :(得分:1)
bar%>%
group_by(city)%>%
mutate(coordinate=list(unlist(coordinate)),
n=list(paste0("coordinate",1:lengths(coordinate))))%>%
unnest%>%
spread(n,coordinate)
# A tibble: 2 x 3
# Groups: city [2]
city coordinate1 coordinate2
<fct> <dbl> <dbl>
1 chicago 10. 15.
2 new york 20. 25.