Matlab/R: 在 R 中重构从 Matlab 导入的数据
Matlab/R: Restructure data in R which was imported from Matlab
我在 matlab 中创建了一个小型数据集,如下所示
可在此处下载可重现的示例:https://www.dropbox.com/s/e2qssxd5pu0x6hn/TEST_DATA.mat?dl=0
我想做的是将这个数据集导入 R 并重构它。我发现 R.matlab
包很有用,并尝试了以下方法。
# Import matlab file into R
library(R.matlab)
# Read in data from matlab file
data_m <- readMat('TEST_DATA.mat')
# convert this to data.frame
df <- as.data.frame(data_m)
我得到的是下面的data.frame:
df
TEST.DATA.1.1 TEST.DATA.2.1
ID 2 4
YEAR 1990, 1991, 1992 2000, 2001
DATA 10, 20, 30, 71, 72, 73 55, 60, 0, 2, 4, 6
DATA.NAME Test n1, n2, n3
正如此处评论所建议的 str(df)
的输出
'data.frame': 4 obs. of 2 variables:
$ TEST.DATA.1.1:List of 4
..$ ID : num [1, 1] 2
..$ YEAR : num [1:3, 1] 1990 1991 1992
..$ DATA : num [1:3, 1:2] 10 20 30 71 72 73
..$ DATA.NAME: chr [1, 1] "Test"
$ TEST.DATA.2.1:List of 4
..$ ID : num [1, 1] 4
..$ YEAR : num [1:2, 1] 2000 2001
..$ DATA : num [1:2, 1:3] 55 60 0 2 4 6
..$ DATA.NAME:List of 3
.. ..$ :List of 1
.. .. ..$ : chr [1, 1] "n1"
.. ..$ :List of 1
.. .. ..$ : chr [1, 1] "n2"
.. ..$ :List of 1
.. .. ..$ : chr [1, 1] "n3"
我如何重构 df
以便得到两个不同的 data.frames
,它们被 ID
字段分开?
> ID2
ID YEAR data.Test data.Test2
1 2 1990 10 71
2 2 1991 20 72
3 2 1992 30 73
> ID4
ID YEAR data.n1 data.n2 data.n3
1 4 2000 55 0 4
2 4 2001 60 2 6
这个好像可以,不知道有没有更好的方法。
❥ data_m <- readMat('~/Downloads/TEST_DATA.mat')
❥ frame <- as.data.frame(data_m)
❥ first <- frame[,1]
❥ second <- frame[,2]
❥ f_clean <- data.frame(first$ID, first$YEAR, first$DATA)
❥ f_clean
first.ID first.YEAR X1 X2
1 2 1990 10 71
2 2 1991 20 72
3 2 1992 30 73
❥ s_clean <- data.frame(second$ID, second$YEAR, second$DATA)
❥ s_clean
second.ID second.YEAR X1 X2 X3
1 4 2000 55 0 4
2 4 2001 60 2 6
编辑:根据@mts 的回答,我们可以执行以下操作:
❥ f2 <- frame[!rownames(frame) %in% 'DATA.NAME',]
❥ sapply(f2, function(x) data.frame(x))
$TEST.DATA.1.1
ID YEAR DATA.1 DATA.2
1 2 1990 10 71
2 2 1991 20 72
3 2 1992 30 73
$TEST.DATA.2.1
ID YEAR DATA.1 DATA.2 DATA.3
1 4 2000 55 0 4
2 4 2001 60 2 6
我在 matlab 中创建了一个小型数据集,如下所示
可在此处下载可重现的示例:https://www.dropbox.com/s/e2qssxd5pu0x6hn/TEST_DATA.mat?dl=0
我想做的是将这个数据集导入 R 并重构它。我发现 R.matlab
包很有用,并尝试了以下方法。
# Import matlab file into R
library(R.matlab)
# Read in data from matlab file
data_m <- readMat('TEST_DATA.mat')
# convert this to data.frame
df <- as.data.frame(data_m)
我得到的是下面的data.frame:
df
TEST.DATA.1.1 TEST.DATA.2.1
ID 2 4
YEAR 1990, 1991, 1992 2000, 2001
DATA 10, 20, 30, 71, 72, 73 55, 60, 0, 2, 4, 6
DATA.NAME Test n1, n2, n3
正如此处评论所建议的 str(df)
'data.frame': 4 obs. of 2 variables:
$ TEST.DATA.1.1:List of 4
..$ ID : num [1, 1] 2
..$ YEAR : num [1:3, 1] 1990 1991 1992
..$ DATA : num [1:3, 1:2] 10 20 30 71 72 73
..$ DATA.NAME: chr [1, 1] "Test"
$ TEST.DATA.2.1:List of 4
..$ ID : num [1, 1] 4
..$ YEAR : num [1:2, 1] 2000 2001
..$ DATA : num [1:2, 1:3] 55 60 0 2 4 6
..$ DATA.NAME:List of 3
.. ..$ :List of 1
.. .. ..$ : chr [1, 1] "n1"
.. ..$ :List of 1
.. .. ..$ : chr [1, 1] "n2"
.. ..$ :List of 1
.. .. ..$ : chr [1, 1] "n3"
我如何重构 df
以便得到两个不同的 data.frames
,它们被 ID
字段分开?
> ID2
ID YEAR data.Test data.Test2
1 2 1990 10 71
2 2 1991 20 72
3 2 1992 30 73
> ID4
ID YEAR data.n1 data.n2 data.n3
1 4 2000 55 0 4
2 4 2001 60 2 6
这个好像可以,不知道有没有更好的方法。
❥ data_m <- readMat('~/Downloads/TEST_DATA.mat')
❥ frame <- as.data.frame(data_m)
❥ first <- frame[,1]
❥ second <- frame[,2]
❥ f_clean <- data.frame(first$ID, first$YEAR, first$DATA)
❥ f_clean
first.ID first.YEAR X1 X2
1 2 1990 10 71
2 2 1991 20 72
3 2 1992 30 73
❥ s_clean <- data.frame(second$ID, second$YEAR, second$DATA)
❥ s_clean
second.ID second.YEAR X1 X2 X3
1 4 2000 55 0 4
2 4 2001 60 2 6
编辑:根据@mts 的回答,我们可以执行以下操作:
❥ f2 <- frame[!rownames(frame) %in% 'DATA.NAME',]
❥ sapply(f2, function(x) data.frame(x))
$TEST.DATA.1.1
ID YEAR DATA.1 DATA.2
1 2 1990 10 71
2 2 1991 20 72
3 2 1992 30 73
$TEST.DATA.2.1
ID YEAR DATA.1 DATA.2 DATA.3
1 4 2000 55 0 4
2 4 2001 60 2 6