[英]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.