首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R-合并和融化列表到数据帧

R-合并和融化列表到数据帧
EN

Stack Overflow用户
提问于 2015-02-10 03:48:46
回答 2查看 8.2K关注 0票数 4

情景与数据

我有一个员工df_employees的数据框架

代码语言:javascript
复制
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

和一张技能清单l_skills

代码语言:javascript
复制
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"

问题

如何合并和融化数据,以给出结果数据df_result

代码语言:javascript
复制
> df_result
  empNo skills
1  1001 skill1
2  1001 skill2
3  1001 skill3
4  1002 skill1
5  1002 skill2
6  1003 skill1

尝试

我想我可以使用类似的方法来实现this cSplit function,但是当我试图安装cSplit时会出错。

代码语言:javascript
复制
> 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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-10 03:58:13

您可以使用来自melt包的reshape2函数:

代码语言:javascript
复制
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

R基解决方案:

代码语言:javascript
复制
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"
票数 5
EN

Stack Overflow用户

发布于 2015-02-10 04:04:03

您还可以使用来自stackbase R

代码语言:javascript
复制
 setNames(stack(setNames(L, df_employees$empNo)), c('skills', 'empNo'))
 #   skills empNo
 #1 skill1  1001
 #2 skill2  1001
 #3 skill3  1001
 #4 skill1  1002
 #5 skill2  1002
 #6 skill1  1003

或者使用splitstackshape

代码语言:javascript
复制
 library(splitstackshape)
 listCol_l(transform(df_employees, skills=I(L)), 'skills')[]
 #   empNo skills_ul
 #1:  1001    skill1
 #2:  1001    skill2
 #3:  1001    skill3
 #4:  1002    skill1
 #5:  1002    skill2
 #6:  1003    skill1

哪里

代码语言:javascript
复制
 L <- l_skills
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28423763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档