【问题标题】:combining two list of values into a data frame: error arguments imply differing number of rows将两个值列表组合到一个数据框中:错误参数意味着不同的行数
【发布时间】:2018-09-01 13:23:42
【问题描述】:

我有两个列表,我想将它们组合成一个数据框。列表遵循这个基本逻辑。 list1 包含国家名称,list2 包含从 list1 中的每个值中提取的值。

list1<-list("A", "C", "B")
list2<-list(c("la la", "po sdfejn kfgndñflgn"), "characther(0)", c("4   5","baby", "yeah")) # note that characther(0) means that there is no data

我想要的结果是这样的:

output <- data.frame( V1 = c(rep("A",2), "C", rep("B",3)), V2 = c("la la", "po sdfejn kfgndñflgn", "characther(0)", "4   5", "baby", "yeah"))

我使用了我在此页面中看到的代码,例如:solution1 &lt;- do.call(rbind, Map(data.frame, a = list1, b= list2))我经常这样做。此代码适用于示例。但是,当我将此公式用于我正在处理的大型列表时,我会收到以下错误消息:

Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = 
TRUE,  : arguments imply differing number of rows: 1, 0

我尝试过unlist(list1), unlist(list1),但它不起作用。如果两个列表相同,那么问题的真正根源在哪里,我该如何解决才能获得所需的输出?

【问题讨论】:

  • 我看不到您的预期输出如何连接到您的示例数据。所有条目似乎都不匹配。请提供基于您的示例数据的预期输出。
  • 恐怕这不是Minimal, Complete, and Verifiable example。使用您的代码和示例数据,我既没有收到您的错误消息,也没有收到预期的输出。请提供复制您的问题的示例数据并解释您预期输出的规则。
  • 对不起,我编辑它
  • 请看我更新的答案。我想我可以生成您预期的输出,除了 A 应该只重复两次。
  • 请再次查看我的更新。我已根据您的最新更新更改了答案。

标签: r list dataframe


【解决方案1】:

使用tidyverse 的解决方案。 dat 是最终输出。

library(tidyverse)

dat <- map2_df(list1, list2, ~data_frame(V1 = .x, V2 = .y))
dat
# # A tibble: 6 x 2
#   V1    V2                  
#   <chr> <chr>               
# 1 A     la la               
# 2 A     po sdfejn kfgndñflgn
# 3 C     characther(0)       
# 4 B     4   5               
# 5 B     baby                
# 6 B     yeah 

【讨论】:

  • 嗨,它有效。我对这段代码和我的数据的问题是类似于 C 的情况被删除了。有没有办法保留它?
  • 如果它适用于您的示例数据集,它应该适用于您的真实数据集。合乎逻辑的结论是您的示例数据框不能代表您的真实数据集。我建议您接受我的帖子作为答案,并使用示例数据集提出一个新问题,真正代表您的真实数据。
  • 我解决了这个问题。由于“字符(0)”是一个空单元格,我在您的代码之前运行此lapply(corporate.info, function(x) if(identical(x, character(0))) NA_character_ else x)。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-11-26
  • 2014-06-18
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多