将特定列组合到单个列中

时间:2017-07-21 04:52:06

标签: r

我有一个数据框

samp_data=data.frame(a=1:5,b=c('22','23','34','21','43'),c=c('11','12','13','54','43')) 

samp_data
 a  b  c
 1 22 11
 2 23 12
 3 34 13
 4 21 54
 5 43 43

str(samp_data)
'data.frame':   5 obs. of  3 variables:
 $ a: int  1 2 3 4 5
 $ b: Factor w/ 5 levels "21","22","23",..: 2 3 4 1 5
 $ c: Factor w/ 5 levels "11","12","13",..: 1 2 3 5 4

我想将上述数据框转换为类似

的内容
1 22
1 11
2 23
2 12
3 34
3 13

这就是保持专栏' a'实际上,将其他两列合并为一列' a'。

我看到了一些相关的线程,发现了这两个函数,但我没有得到理想的结果。

dat <- data.frame(samp_data[1], stack(samp_data[2:ncol(samp_data)]))
dat <- melt(samp_data, id.vars=1)

1 个答案:

答案 0 :(得分:0)

我们可以为列的子集(没有第一列)进行转置和连接,并创建data.frame并复制第一列

d1 <- data.frame(a = rep(samp_data[,1], each = 2), b = c(t(samp_data[-1])))
d1
#   a  b
#1  1 22
#2  1 11
#3  2 23
#4  2 12
#5  3 34
#6  3 13
#7  4 21
#8  4 54
#9  5 43
#10 5 43

或者@thelatemail提到

data.frame(samp_data["a"], b=unlist(samp_data[c("b","c")], use.names = FALSE))