簡體   English   中英

R將字符向量組合到數據幀中,向量名稱為行ID

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM