2017-02-14 118 views
1

我有一個三維Excel表,我想轉換成一個二維數據框,我可以在R中使用。我認爲最好的方法是在R中讀取它,然後在R中直接轉換它,但我不知道如何。這是一個例子。我有我想要轉換到DF2一個DF1般的數據幀:轉換3D數據幀到2D數據幀在R

a1 <- paste("a","b","c",sep = ";") 
a2 <- paste("e","f","g",sep = ";") 

df1 <- data.frame(v1=a1, v2=a2, row.names = "w1") 
df2 <- data.frame(w1=c(rep("v1",3),rep("v2",3)), "value"=letters[1:6]) 
+0

我有多行。 – user34771

回答

2

你可以做到這一點通過使用reshape2

sub_df1 <- apply(df1,2,FUN= strsplit,split = ";") 
# $v1 
# $v1$w1 
# [1] "a" "b" "c" 
# $v2 
# $v2$w1 
# [1] "e" "f" "g 
sub_df2 <- sapply(apply(df1,2,FUN= strsplit,split = ";"), FUN = unlist,use.names = TRUE, recursive = FALSE) 
#  v1 v2 
# w11 "a" "e" 
# w12 "b" "f" 
# w13 "c" "g" 
melt(sub_df2)[-1] 
# Var2 value 
# 1 v1  a 
# 2 v1  b 
# 3 v1  c 
# 4 v2  e 
# 5 v2  f 
# 6 v2  g 

然後,您可以刪除第一列通過添加[-1]

+0

非常感謝,這正是我所期待的。我想過融化功能,但我缺乏分裂步驟。 – user34771

+0

你可能直接使用熔化而不是'sub_df2'。但是,我不確定如何獲取列名稱.. – theArun