[英]R combine character vectors into dataframe, with vector name as row id
我有三个字符向量:
blue <-c("Ti","Ka","Vv","Cn")
Turq <-c("Cc","Wx","Oq","Yt")
Indigo <-c("Gb","Ap")
我想将它们组合成一个数据帧,使它们看起来像这样:
blue Ti
blue Ka
blue Vv
blue Cn
Turq Cc
Turq Wx
Turq Oq
Turq Yt
Indigo Gb
Indigo Ap
我似乎无法找到办法
您可以将向量放在命名列表中,然后使用stack
:
lst <- list(blue = blue, Turq = Turq, Indigo = Indigo)
lst
# $blue
# [1] "Ti" "Ka" "Vv" "Cn"
# $Turq
# [1] "Cc" "Wx" "Oq" "Yt"
# $Indigo
# [1] "Gb" "Ap"
stack(lst)
# values ind
#1 Ti blue
#2 Ka blue
#3 Vv blue
#4 Cn blue
#5 Cc Turq
#6 Wx Turq
#7 Oq Turq
#8 Yt Turq
#9 Gb Indigo
#10 Ap Indigo
这不是很有效,但它完成了工作。
blue <-c("Ti","Ka","Vv","Cn")
Turq <-c("Cc","Wx","Oq","Yt")
Indigo <-c("Gb","Ap")
#assumes no duplicates in the original vectors.
df<-as.data.frame(cbind(blue, Turq, Indigo))
library(tidyr)
df<-unique(gather(df))
这会产生一些警告,但会提供您要求的结果。 cbind开始重复向量,使所有向量长度相同。
尝试:
df<-data.frame(blue,Turq,Indigo)
library(reshape)
unique(melt(cbind(1:nrow(df),df),id=1)[,-1])
variable value
1 blue Ti
2 blue Ka
3 blue Vv
4 blue Cn
5 Turq Cc
6 Turq Wx
7 Turq Oq
8 Turq Yt
9 Indigo Gb
10 Indigo Ap
将载体放入list
后,我们可以使用melt
。
library(reshape2)
melt(mget(c("blue", "Turq", "Indigo")))[2:1]
# L1 value
#1 blue Ti
#2 blue Ka
#3 blue Vv
#4 blue Cn
#5 Turq Cc
#6 Turq Wx
#7 Turq Oq
#8 Turq Yt
#9 Indigo Gb
#10 Indigo Ap
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.