r - 如何将 MATLAB 结构加载到 R 数据框中?

标签 r matlab dataframe import matlab-struct

我有一个 MATLAB 结构,其中包含许多字段,这些字段共同描述了多个变量的 100 个观察值,如下所示(MATLAB 输出):

mystruct = 

  fieldA: [100x1 double]
  fieldB: [100x1 double]
  fieldC: [100x1 double]
  fieldD: [100x1 char]
  fieldE: {100x1 cell}

我想将 R 用于此数据,因此我将结构保存为 .mat 文件。并使用 R.matlab 导入它包裹。因为我是 R 的新手,所以以下内容可能很笨拙,但我可以很好地访问各个字段(R 代码):

> f = readMat('myfile.mat')
> data = f$mystruct
> data
  , , 1

      [,1]         
  fieldA Numeric,100  
  fieldB Numeric,100  
  fieldC Numeric,100  
  fieldD Character,100
  fieldE List,100   

> data = data[, , 1]
> df <- data.frame(fieldA = data$fieldA, fieldB = data$fieldB)

好的,问题来了:我如何概括以上内容,以便为原始结构中的任意数量的字段生成数据框?对于我的 5 字段示例,我可以手动完成,但我的下一个数据集有很多字段,我不想全部输入。

根据 this question ,我尝试了 rbind()ldply(),它们构建了尺寸惊人的数据帧(分别为 1 个变量的 401 个 obs 和 105 个变量的 401 个 obs)。

最佳答案

事实证明,MATLAB 元胞数组 (fieldE) 是作为嵌套列表导入的。使用 unlist 可以解决这个问题:

data = lapply(data, unlist, use.names=FALSE)
df <- as.data.frame(data) # now has correct number of obs and vars

感谢@koekenbakker 对此的关键指示!

关于r - 如何将 MATLAB 结构加载到 R 数据框中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28080579/

相关文章:

r - dplyr 管道 : how to add a margin row calculating a total (like addmargins function - base)

r - 将单圈时间从因子转换为 R 中带小数的时间

r - 为什么 `levels<-` 根据命名参数的顺序表现不同?

matlab - 在Matlab中比较两个矩阵

python - 如何进行自定义分组依据?

python - 在 Pandas Dataframe 中使用值为 1 的列创建一个短语列

R:从命令行运行脚本时显示绘图

MATLAB:如何在连续 block 中按列计算数字频率

matlab - 生成矩阵

r - 无法从 R 数据帧中删除空 `character(0)` 或 `list()` 值