我有一个数据框
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] 删除。
我来说两句