0

我有一个由如下记录组成的数据框。数据帧的典型行 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"
4

1 回答 1

3

尝试这个:

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

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

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

 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
于 2015-09-25T23:06:29.040 回答