【问题标题】:Converting a list of lists of strings to a data frame of numbers in R将字符串列表转换为R中的数字数据框
【发布时间】:2017-02-28 16:41:47
【问题描述】:

我有一个字符串列表如下:

> ll

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

[[2]]
character(0)

[[3]]
[1] "1"

[[4]]
[1] "1" "8"

最长的列表长度为 2,我想从这个列表中构建一个包含 2 列的数据框。还将列表中的每个项目转换为数字或字符(0)的 NA 的奖励积分。我尝试使用 mapply() 和 data.frame 转换为数据框并填充 NA,如下所示。

#  Find length of each list element
len = sapply(awards2, length)

#  Number of NAs to fill for column shorter than longest
len = 2 - len

df = data.frame(mapply( function(x,y) c( x , rep( NA , y ) ) , ll , len))

但是,使用上面的代码,我没有得到一个包含 2 列(和 NA 作为填充符)的数据框。

感谢您的帮助。

【问题讨论】:

  • sapply(ll, '[', 1:max(lengths(ll)))
  • @d.b,列数是已知的,所以你可以用length<-代替:t(sapply(ll, `length<-`, 2))

标签: r list dataframe mapply


【解决方案1】:

我们可以从stringi 使用stri_list2matrix。由于list元素都是character向量,所以用这个函数好像没问题

library(stringi)
t(stri_list2matrix(ll))
#     [,1] [,2]
#[1,] "2"  "1" 
#[2,] NA   NA  
#[3,] "1"  NA  
#[4,] "1"  "8" 

如果我们需要转换成data.frame,用as.data.frame包裹起来

【讨论】:

  • 再次感谢阿克伦!我想我需要学习一下你正在使用的这些字符串包。
猜你喜欢
  • 2019-07-04
  • 2019-04-17
  • 2019-04-28
  • 2020-09-21
  • 2022-08-17
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多