2017-02-14 119 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