【问题标题】:convert row in data frame to list of lists in r将数据框中的行转换为 r 中的列表列表
【发布时间】:2015-09-25 22:59:46
【问题描述】:

我有一个由如下记录组成的数据框。数据框的典型行 df[1,] 如下所示

84745,"F",70,7,"Single",2,"N",4,9,1,1,3,4,4,"2 day","<120 and <80",0,8,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1

我想把它转换成一个像下面的myvar这样的变量

myvar = list( list(84745,"F",70,7,"Single",2,"N",4,9,1,1,3,4,4,"2 day","<120 and <80",0,8,0,1,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1))

我已尝试执行以下操作,但无法将其转换为列表列表。

myvar <- as.list(as.list(as.data.frame(t(df[1,]))))

我该怎么做?

编辑:我试过 myvar = list(unclass(df[14,])).但是,由于输出 myvar 的格式略有不同,因此调用失败。

原代码行格式

[[1]]
[[1]][[1]]
[1] 21408

[[1]][[2]]
[1] "M"

[[1]][[3]]
[1] 69

[[1]][[4]]
[1] 3

[[1]][[5]]
[1] "Widowed"

myvar 的格式 = list(unclass(df[14,]))

[[1]]
[[1]]$ID
[1] "21408"

[[1]]$GenderCD
[1] "M"

[[1]]$Age
[1] "69"

[[1]]$LOS
[1] "3"

[[1]]$MaritalStatus
[1] "Widowed"

【问题讨论】:

  • 您需要列表列表做什么?这可能有助于找到一个好的解决方案。
  • @theWanderer4865,它用于测试部署在 azure 上的 Web 服务,该服务期望输入为列表列表
  • 编辑表明您没有提供正确的示例。使用 unclass 不会强制数据帧中的一行都是同一个类。正如我的回答中所指出的那样,使用t 可以做到这一点。

标签: r dataframe sapply mapply


【解决方案1】:

试试这个:

 myvar <- list( unclass( df[1,] )

解释:df[1,] 实际上仍然是一个列表,但具有“data.frame”类属性。如果你删除它的类,它现在只是一个普通的列表。当您执行t(df[1,]-操作时,您强制该行成为一个列向量,在数据帧中该列向量需要全部是来的类,因此发生了强制。

如果目标是逐行解决方案,则执行以下操作:

 myvar <- list()
 for (i in seq(nrow(df)) ) { myvar[[i]]  <-  unclass( df[i,] )}

如果它也需要匿名,我很怀疑,但我认为这是可能的:

 myvar <- list()
 for (i in seq(nrow(df)) ) { myvar[[i]]  <-  unname( unclass( df[i,] )) }

我测试了unname 策略:

> unname(unclass( data.frame(a=345,b="tyt")[1,]))
[[1]]
[1] 345

[[2]]
[1] tyt
Levels: tyt

attr(,"row.names")
[1] 1

【讨论】:

  • 除非您在取消命名对象时遇到问题,否则我看不到问题。
  • 将列名设置为 Null
  • @PierreLafortune 使用unname 有问题吗?应该是NULL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-23
  • 2021-10-17
  • 1970-01-01
  • 2015-11-14
  • 2021-01-18
  • 1970-01-01
相关资源
最近更新 更多