R 将数据帧列合并到向量中
我想知道是否有更好的方法可以在不使用字符串拆分的情况下产生以下结果:R 将数据帧列合并到向量中,r,vector,R,Vector,我想知道是否有更好的方法可以在不使用字符串拆分的情况下产生以下结果: library('magrittr') combn(5, 2) %>% t %>% as.data.frame %>% mutate( string = paste(V1, V2, sep = ';') , vector = string %>% strsplit(split = ';') ) %>% View 我尝试了以下代码,但无效: comb
library('magrittr')
combn(5, 2) %>%
t %>%
as.data.frame %>%
mutate(
string = paste(V1, V2, sep = ';')
, vector = string %>% strsplit(split = ';')
) %>% View
我尝试了以下代码,但无效:
combn(5, 2) %>%
t %>%
as.data.frame %>%
mutate(
string = paste(V1, V2, sep = ';')
, vector = c(V1, V2)
) %>% View
谢谢您的帮助。我们可以有一个
列表
专栏。如果我们在combn
中指定simplify=FALSE
,它将返回向量的list
,可以将其包装在tibble
中以创建list
列
combn(5, 2, simplify = FALSE) %>%
tibble(vector = .)
或者另一种选择是使用
unnest\u wide
和unite
library(tidyr)
library(dplyr)
library(stringr)
combn(5, 2, 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
,它在元素连接两列之后返回一个列表
library(purrr)
combn(5, 2) %>%
t %>%
as.data.frame %>%
mutate(
string = paste(V1, V2, sep = ';'),
vector = map2(V1, V2, 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, 2, 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, 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
do.call(rbind,combn)(5,2,function(x){
df