在 R 中将 3D 数据帧转换为 2D 数据帧
Convert 3D-dataframe to 2D-dataframe in R
我有一个三维 excel table,我想将其转换成可以在 R 中使用的二维数据框。我认为最好的方法是在 R 中读取它,然后然后直接在 R 中转换它,但我没有找到如何。这是一个例子。我有一个类似 df1 的数据框,我想将其转换为 df2:
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])
您可以使用 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]
来删除第一列
我有一个三维 excel table,我想将其转换成可以在 R 中使用的二维数据框。我认为最好的方法是在 R 中读取它,然后然后直接在 R 中转换它,但我没有找到如何。这是一个例子。我有一个类似 df1 的数据框,我想将其转换为 df2:
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])
您可以使用 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]