将数据框变成每行列表,在R中每行创建一个向量

问题描述

我有以下数据框df(实际上更大):

      A       B       C
1   ORp0    RT1p20  RT2p20  
2   RT3p0   RT4p0   RT5p0   
3   RT3p0   RT4p0   RT5p05

我需要将其变成一个对象,以便结构看起来像这样

str(df)

List of 3
 $ : chr [1:3] "ORp0"  "RT1p20" "RT2p20"
 $ : chr [1:3] "RT3p0" "RT4p0"  "RT5p0"
 $ : chr [1:3] "RT3p0" "RT4p0"  "RT5p05"

此列表的每一行似乎都是一个向量。如何从数据框实现这种转换?

非常感谢您

解决方法

尝试一下:

#Data
df <- structure(list(A = c("ORp0","RT3p0","RT3p0"),B = c("RT1p20","RT4p0","RT4p0"),C = c("RT2p20","RT5p0","RT5p05")),class = "data.frame",row.names = c("1","2","3"))

代码:

List <- split(df,rownames(df))

输出:

List
$`1`
     A      B      C
1 ORp0 RT1p20 RT2p20

$`2`
      A     B     C
2 RT3p0 RT4p0 RT5p0

$`3`
      A     B      C
3 RT3p0 RT4p0 RT5p05

如果您想进一步格式化,则可以使用下一个代码:

L2 <- lapply(List,function(x) {y <- c(t(x[1,])); return(y)})

这将输出:

L2
$`1`
[1] "ORp0"   "RT1p20" "RT2p20"

$`2`
[1] "RT3p0" "RT4p0" "RT5p0"

$`3`
[1] "RT3p0"  "RT4p0"  "RT5p05"

类似于您想要的。正如观察时要小心行名,并检查它们从1开始到数据框中的最后观察。有时它们可​​能会有所不同!

,

您可以使用split

new_list <- split(as.matrix(df),row(df))
new_list
$`1`
[1] "ORp0"   "RT1p20" "RT2p20"

$`2`
[1] "RT3p0" "RT4p0" "RT5p0"

$`3`
[1] "RT3p0"  "RT4p0"  "RT5p05"

str(new_list)
List of 3
 $ 1: chr [1:3] "ORp0" "RT1p20" "RT2p20"
 $ 2: chr [1:3] "RT3p0" "RT4p0" "RT5p0"
 $ 3: chr [1:3] "RT3p0" "RT4p0" "RT5p05"
,

您可以尝试以下选项:

  • asplit + unname
> str(Map(unname,asplit(df,1)))
List of 3
 $ 1: chr [1:3(1d)] "ORp0" "RT1p20" "RT2p20"
 $ 2: chr [1:3(1d)] "RT3p0" "RT4p0" "RT5p0"
 $ 3: chr [1:3(1d)] "RT3p0" "RT4p0" "RT5p05"

或更简单的一个(在评论中@akrun)

> str(asplit(unname(df),1))
List of 3
 $ 1: chr [1:3(1d)] "ORp0" "RT1p20" "RT2p20"
  ..- attr(*,"dimnames")=List of 1
  .. ..$ : NULL
 $ 2: chr [1:3(1d)] "RT3p0" "RT4p0" "RT5p0"
  ..- attr(*,"dimnames")=List of 1
  .. ..$ : NULL
 $ 3: chr [1:3(1d)] "RT3p0" "RT4p0" "RT5p05"
  ..- attr(*,"dimnames")=List of 1
  .. ..$ : NULL
 - attr(*,"dim")= int 3
 - attr(*,"dimnames")=List of 1
  ..$ : chr [1:3] "1" "2" "3"
  • unclass + as.data.frame + t
> str(unclass(as.data.frame(t(df))))
List of 3
 $ 1: chr [1:3] "ORp0" "RT1p20" "RT2p20"
 $ 2: chr [1:3] "RT3p0" "RT4p0" "RT5p0"
 $ 3: chr [1:3] "RT3p0" "RT4p0" "RT5p05"
 - attr(*,"row.names")= chr [1:3] "A" "B" "C"

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...