在 r 中的 melt 函数中设置值的数据类型

Set data type of values in melt function in r

我有一个嵌套的命名列表,如下所示:

> data <- list("1"=list(rating=-1,points=190,name="Fernando"),"2"=list(rating=3,points=532,name="Carlos")) 
> data
$'1'
$'1'$rating
[1] -1

$'1'$points
[1] 190

$'1'$name
[1] "Fernando"

$'2'
$'2'$rating
[1] 3

$'2'$points
[1] 532

$'2'$name
[1] "Carlos"

现在,当我在 "data" 上使用 melt 函数时,它将名称的值转换为数字而不是字符。我能理解为什么,因为值的数据类型设置为数字。有没有办法将值的数据类型转换为整体字符。

这是我使用 melt 函数时得到的结果:

> melt(data)
     value    L2     L1
1    -1      rating   1
2    190     points   1
3     1      name     1
4     3      rating   2
5    532     points   2
6     1      name     2

但我想要的是:

     value    L2     L1
1    -1      rating   1
2    190     points   1
3   Fernando name     1
4     3      rating   2
5    532     points   2
6   Carlos   name     2  

其中值的数据类型是字符。

我认为这应该可行; data 对象的嵌套 lapply,然后(在转换为 as.character 之后)使用 reshape2 包的 melt

 melt(lapply(data, function(x) lapply(x, as.character)))
     value     L2 L1
1       -1 rating  1
2      190 points  1
3 Fernando   name  1
4        3 rating  2
5      532 points  2
6   Carlos   name  2

或者只需两步 data <- lapply(data, function(x) lapply(x, as.character)) 然后 melt(data)

您可以使用 rapply,不确定您的嵌套性

melt(rapply(data, as.character, how="list"))
#      value     L2 L1
# 1       -1 rating  1
# 2      190 points  1
# 3 Fernando   name  1
# 4        3 rating  2
# 5      532 points  2
# 6   Carlos   name  2

这是apply的递归版本,因此对于遍历嵌套列表很有用。