转换DataTable结构 - 将列名称用作值

时间:2017-11-07 08:41:11

标签: r

我有一个格式如下的数据表:

Name            A1    A2    A3     A4
Object 1         1     0     1      0
Object 2         1     0     0      0
Object 3         0     1     0      1

我想要完成的事情:

Name            Skill LeveL Skill Level Skill Level Skill Level 
Object 1           A1    1    A2     0     A3    1    A4     0
Object 2           A1    1    A2     0     A3    0    A4     0
Object 3           A1    0    A2     1     A3    0    A4     1 

在R中,实现这一目标的最佳方法是什么?我知道R无法处理重复的列名。为了防止这种情况,'Skill1,Level1 - Skill2,Level2'可以正常工作以及列名。我的源数据表具有动态范围的列名称(因此,它取决于它包含2到40个列名称的子集)。

1 个答案:

答案 0 :(得分:1)

你可以试试这个

ll <- lapply(2:ncol(df), function(x) data.frame(Skill = names(df[x]), Level = df[, x]))
cbind(Name = df[, 1], do.call('cbind', ll))