我有一个存储在如下列表中的字符向量列表:
basket1 <- c("Apple", "Orange", "Banana", "Apple", "Apple", "Grape")
basket2 <- c("Grape", "Grape", "Grape", "Grape")
basket3 <- c("Kiwi", "Apple", "Cantaloupe", "Banana")
basket4 <- c("Strawberry")
basket5 <- c("Grape", "Grape", "Grape")
FruitBasketList <- list(basket1, basket2, basket3, basket4, basket5)
我想把FruitBasketList
放入一个数据框中,其中每行中每个水果的计数与其来自的篮子相匹配。我遇到的主要问题是每个向量中可能有数千种不同的“水果”,并且其中很多会出现多次。
这是我想要的结果:
Basket Apple Orange Banana Grape Kiwi Cantaloupe Strawberry
basket1 3 1 1 1 0 0 0
basket2 0 0 0 4 0 0 0
basket3 1 0 1 0 1 1 0
basket4 0 0 0 0 0 0 1
basket5 0 0 0 3 0 0 0
显然,这不是我的真实数据,但我想我应该简化数据的样子,以便任何人都能够理解它。不,这不是家庭作业。无论如何,篮子里的水果数量可以是一千个不同的水果,并且每个水果向量的长度不会相同。也可能有数以万计的篮子(向量)。显然,某些水果可以在同一向量(篮子)中重复多次。我一直在努力解决这个问题,但我确信它过于复杂且效率很低。到目前为止,我的解决方案涉及组合所有向量中的所有向量,然后识别所有可能的唯一水果名称。效果很好。然后我正在努力解决的部分是从所有这些唯一的列名称中创建一个空数据框,然后为每个向量计算每个唯一的水果,然后将该值放置在数据框中新行中的正确列中特定篮子中不存在的水果为零。
我用来计算各个向量的代码如下所示:
GetUniqueItemCount <- function(rle, value)
{
value <- rle$lengths[rle$values == value]
if (identical(value, integer(0)))
{
value <- 0
}
value
}
调用它的代码如下所示:
Apple <- GetUniqueItemCount(rle, "Apple")
正如您在我当前的代码中看到的,我必须事先知道所有可能的水果,并对每种水果的数量进行硬编码,然后将其分配给数据框中预先已知的特定列。不管怎样,我意识到我在这里走错了路,所以我很感激任何关于回到正轨以获得上面显示的我想要的数据框的建议。请随意提供一种完全不同的方法,而不是试图找出如何让我的方法工作,如果这是解决问题的最佳方法。