【问题标题】:R: apply as.list to data frame converts numeric to characterR:将 as.list 应用于数据框将数字转换为字符
【发布时间】:2019-03-25 15:30:44
【问题描述】:

当尝试将数据框转换为类似于嵌套字典的列表时,我尝试使用以下命令:

 df = data.frame(col1 = c('a', 'b'), col2 = c(1, 2))
 df[,1] = as.character(df[,1])

 ls1 = apply(df, 1, as.list)
 print(ls1)

但是,现在 ls1 中 col2 的值似乎被转换为字符:

 class(ls1[[2]]$col2)
 # [1] "character"

这种解决方法有效,但我很好奇是否有人知道,为什么结果与以前的代码不同?

 ls2 = as.list(df[1,])
 for(i in 2:nrow(df)){
   ls2 = list(ls2, as.list(df[i,]))
 }
 print(ls2)

 class(ls1[[2]]$col2)
 # [1] "numeric"

【问题讨论】:

  • 最好不要使用apply,因为它首先会转换为matrix。试试split(df, seq_len(nrow(df)))
  • @IceCreamToucan 我不确定我明白你的意思,thole 体操是以 JSON 形式获取df,例如:{"list":[{"col1":"a","col2":1},{"col1":"b","col2":2}]} 不知何故......(抱歉,我很抱歉解释问题)

标签: r list dataframe apply


【解决方案1】:

而不是apply,它将数据转换为matrixmatrix 只能有一个类,使用split

lst1 <- unname(split(df, seq_len(nrow(df))))

如果我们需要JSON的输出,数据集可以直接用toJSON转换成JSON

jsonlite::toJSON(df)
#[{"col1":"a","col2":1},{"col1":"b","col2":2}] 

根据与 OP 的对话,dataset 作为命名list 传递,需要转换为 JSON 格式

toJSON(list(listName = df))
#{"listName":[{"col1":"a","col2":1},{"col1":"b","col2":2}]} 

【讨论】:

  • 我之前尝试过使用 split,但问题是我无法删除行名 - 例如转换为 JSON(由于某种原因我无法在代码模式下编写抱歉): ls3 = split (df, seq_len(nrow(df)))
  • @MatijaCerne 你可以改unname(split(df, seq_len(nrow(df))))
  • @MatijaCerne 你的预期输出是什么
  • [{"col1":"a","col2":1},{"col1":"b","col2":2}] 会很完美
  • [[{"col1":"a","col2":1}],[{"col1":"b","col2":2}]] 来自unname(split(...))
猜你喜欢
  • 1970-01-01
  • 2017-04-25
  • 2019-07-04
  • 1970-01-01
  • 2022-08-12
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多