【问题标题】:Convert 3D-dataframe to 2D-dataframe in R在 R 中将 3D 数据帧转换为 2D 数据帧
【发布时间】:2017-02-14 15:07:44
【问题描述】:

我有一个三维 excel 表,我想将其转换为可以在 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])

【问题讨论】:

  • 我有多行。

标签: r dataframe data-conversion


【解决方案1】:

您可以通过使用 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] 来删除第一列

【讨论】:

  • 非常感谢,这正是我想要的。我考虑过融化功能,但我缺少分裂步骤。
  • 你可以直接使用 melt 而不是sub_df2。但是,我不确定如何获取列名..
猜你喜欢
  • 2022-06-29
  • 2019-05-17
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2014-04-15
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多