将数据帧中的行转换为r中的列表列表

时间:2015-09-25 22:59:46

标签: r dataframe sapply mapply

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

1 个答案:

答案 0 :(得分:3)

试试这个:

 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