R将字典转换为列表

时间:2018-11-11 12:07:21

标签: r dictionary dataframe

我有一个这样的列表(或字典):

df <- list(`digits/trainingDigits/0_0.txt` = c(0, 1, 1, 0), `digits/trainingDigits/0_1.txt` = c(0, 1, 0, 0), `digits/trainingDigits/0_10.txt` = c(0, 0, 1, 0))

我想将其转换为以下列表:

df <- list(c(0, 1, 1, 0), c(0, 1, 0, 0), c(0, 0, 1, 0))

以某种方式删除“ =”之前的文本。我对r很陌生,我假设它就像是一个带有键和值的Python字典。在这种情况下,我想要一个值列表。

所以最后我会有这个:

df2 <- list(c(0, 1, 1, 0), c(0, 1, 0, 0), c(0, 0, 1, 0))

df2 <- as.data.frame(df2)
t(df2)

此结果:

enter image description here

1 个答案:

答案 0 :(得分:2)

dat <- list(
  `digits/trainingDigits/0_0.txt` = c(0, 1, 1, 0),
  `digits/trainingDigits/0_1.txt` = c(0, 1, 0, 0),
  `digits/trainingDigits/0_10.txt` = c(0, 0, 1, 0)
)

上面是一个命名列表。让我们删除名称:

str(unname(dat))
## List of 3
##  $ : num [1:4] 0 1 1 0
##  $ : num [1:4] 0 1 0 0
##  $ : num [1:4] 0 0 1 0

现在上面是一个未命名列表。我们可以将其转换为数值矩阵:

do.call(rbind, unname(dat))
##      [,1] [,2] [,3] [,4]
## [1,]    0    1    1    0
## [2,]    0    1    0    0
## [3,]    0    0    1    0

然后将其转换为数据框:

as.data.frame(do.call(rbind, unname(dat)))
##   V1 V2 V3 V4
## 1  0  1  1  0
## 2  0  1  0  0
## 3  0  0  1  0