r - 合并并将列表熔化到数据框

tos*_*pig 4 r

情况和数据

我有一个员工数据框df_employees:

df_employees <- structure(list(empNo = c(1001, 1002, 1003)), .Names = "empNo", row.names = c(NA, 
  -3L), class = "data.frame")

> df_employees
  empNo
1  1001
2  1002
3  1003
Run Code Online (Sandbox Code Playgroud)

和一系列技能 l_skills

l_skills <- list(c("skill1", "skill2", "skill3"), c("skill1", "skill2"), 
             "skill1")


> l_skills
[[1]]
[1] "skill1" "skill2" "skill3"

[[2]]
[1] "skill1" "skill2"

[[3]]
[1] "skill1"
Run Code Online (Sandbox Code Playgroud)

如何合并和融合数据以获得结果数据帧 df_result

> df_result
  empNo skills
1  1001 skill1
2  1001 skill2
3  1001 skill3
4  1002 skill1
5  1002 skill2
6  1003 skill1
Run Code Online (Sandbox Code Playgroud)

尝试

我以为我可以使用类似的方法来处理这个cSplit函数,但是在尝试安装时遇到了错误cSplit

> install.packages("cSplit")
Installing package into ‘C:/Users/<username>/Documents/R/win-library/3.1’
(as ‘lib’ is unspecified)
Warning in install.packages :
  package ‘cSplit’ is not available (for R version 3.1.2)
Run Code Online (Sandbox Code Playgroud)

Mar*_*pov 5

您可以使用包中的melt功能reshape2:

library(reshape2)

L <- l_skills
names(L) <- df_employees$empNo

result <- melt(L)
colnames(result) <- c('skills','empNo')

result
#   skills empNo
# 1 skill1  1001
# 2 skill2  1001
# 3 skill3  1001
# 4 skill1  1002
# 5 skill2  1002
# 6 skill1  1003
Run Code Online (Sandbox Code Playgroud)

基础R解决方案:

do.call(rbind,mapply(cbind,df_employees$empNo,l_skills))
#       [,1]   [,2]    
#[1,] "1001" "skill1"
#[2,] "1001" "skill2"
#[3,] "1001" "skill3"
#[4,] "1002" "skill1"
#[5,] "1002" "skill2"
#[6,] "1003" "skill1"
Run Code Online (Sandbox Code Playgroud)