如何解决将数据框列合并为向量
我想知道是否有更漂亮的方法可以在不使用字符串拆分的情况下产生以下结果:
library('magrittr')
combn(5,2) %>%
t %>%
as.data.frame %>%
mutate(
string = paste(V1,V2,sep = ';'),vector = string %>% strsplit(split = ';')
) %>% View
我尝试了以下代码无济于事:
combn(5,vector = c(V1,V2)
) %>% View
谢谢您的帮助。
解决方法
我们可以有一个list
列。如果我们在simplify = FALSE
中指定combn
,它将返回list
个向量,可以将它们包装在tibble
中以创建一个list
列
combn(5,2,simplify = FALSE) %>%
tibble(vector = .)
或者另一种选择是将unnest_wider
与unite
一起使用
library(tidyr)
library(dplyr)
library(stringr)
combn(5,simplify = FALSE) %>%
tibble(vector = .,vector2 = vector) %>%
unnest_wider(c(vector2),names_repair =
~ c('vector',str_c('V',1:2))) %>%
unite(string,V1,V2,sep=";",remove = FALSE)
如果我们使用OP的方法,则选项为map2
,它将两个列逐元素连接后返回list
library(purrr)
combn(5,2) %>%
t %>%
as.data.frame %>%
mutate(
string = paste(V1,sep = ';'),vector = map2(V1,c))
# V1 V2 string vector
#1 1 2 1;2 1,2
#2 1 3 1;3 1,3
#3 1 4 1;4 1,4
#4 1 5 1;5 1,5
#5 2 3 2;3 2,3
#6 2 4 2;4 2,4
#7 2 5 2;5 2,5
#8 3 4 3;4 3,4
#9 3 5 3;5 3,5
#10 4 5 4;5 4,5
,
您可以在同一个combn
函数中执行此操作,方法是将一个函数传递给该函数,以构造具有所需所有值的数据框并将它们组合为一个值。
do.call(rbind,combn(5,function(x) {
df <- data.frame(V1 = x[1],V2 = x[2],string = paste(x,collapse = ";"))
df$vector <- list(x)
df
},simplify = FALSE))
# V1 V2 string vector
#1 1 2 1;2 1,5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。