将特定列合并为一列

痕迹

我有一个数据框

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)
阿克伦

我们可以对列的子集(没有第一个)进行转置和连接,并创建一个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))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章