我想拍这个data.frame:
df1 <- data.frame(col1 = c(1, 2), col2 = c('A', 'B'))
并将其转换为具有以下结构的列表:
man.list <- list(list(1, 'A'), list(2, 'B'))
我试过这种方法:
df1.list <- split(df1, seq(nrow(df1)))
但这不是我想要的,因为
df1.list[[1]]
给出
col1 col2
1 1 A
和
man.list[[1]]
给出
[[1]]
[1] 1
[[2]]
[1] "A"
如何将df1转换为具有man.list结构的列表?
答案 0 :(得分:2)
我们可以按行序列split
转换&#39; col2&#39;到character
课程,将names
设置为&#39; NULL&#39;并使用list
转换为as.list
。
man.list2 <- setNames(lapply(split(df1, 1:nrow(df1)), function(x)
setNames(as.list(transform(x, col2 = as.character(col2))), NULL)), NULL)
identical(man.list, man.list2)
#[1] TRUE
或者如果&#39; 1&#39;和&#39; 2&#39;也可以是字符(这会将其存储在list
中的想法失败),如评论中所示
lapply(strsplit(do.call(paste, df1), " "), as.list)