首页 > 解决方案 > 将具有字符向量作为列的数据帧转换为长格式

问题描述

我希望有人可以帮助我解决我在 DataCamp“使用 Shiny in R 构建 Web 应用程序”课程的练习中遇到的问题,特别是转换他们在练习中使用的数据集之一。

我已经使用 readRDS 函数导入了他们的数据集(RDS),它看起来像这样:

 $ id         : int  10259 25693 20130 22213 13162 6602 42779 3735 16903 12734 ...
 $ cuisine    : chr  "greek" "southern_us" "filipino" "indian" ...
 $ ingredients:List of 39774
  ..$ : chr  "romaine lettuce" "black olives" "grape tomatoes" "garlic" ...
  ..$ : chr  "plain flour" "ground pepper" "salt" "tomatoes" ...
  ..$ : chr  "eggs" "pepper" "salt" "mayonaise" ...
  ..$ : chr  "water" "vegetable oil" "wheat" "salt"
  ..$ : chr  "black pepper" "shallots" "cornflour" "cayenne pepper" ...
  ..$ : chr  "plain flour" "sugar" "butter" "eggs" ...
  ..$ : chr  "olive oil" "salt" "medium shrimp" "pepper" ...
  ..$ : chr  "sugar" "pistachio nuts" "white almond bark" "flour" ...
  ..$ : chr  "olive oil" "purple onion" "fresh pineapple" "pork" ...
  ..$ : chr  "chopped tomatoes" "fresh basil" "garlic" "extra-virgin olive oil" ...

在他们的教程中,他们有一个数据集,该数据集已经过转换,因此有三列,id、美食和成分,但成分只有一种成分(意味着同一个 id 有多行)。

通常当我必须做这样的事情时,我使用 dplyr 函数“收集”,但这在这种情况下不起作用,因为它用于收集多个列,而不是吐出包含不同长度字符向量的列。我也尝试使用单独的()函数,但这需要您指定要将向量分成哪些列,我不能这样做,因为它们的长度都不同。

如果有人可以告诉我如何将上述数据框转换为长格式,我将不胜感激。

非常感谢!

标签: rtransformationrds

解决方案


听起来您正在寻找spreadhttps ://tidyr.tidyverse.org/reference/spread.html 。这有效地与gather.

还应该提到gather并且spread不再更新,已被他们可以说是更明确的对应物所取代pivot_longerpivot_widerhttps: //tidyr.tidyverse.org/reference/pivot_longer.htmlhttps://tidyr.tidyverse.org/reference /pivot_wider.html。然而,Datacamp 可能没有更新他们的课程以反映这一点。


推荐阅读