【问题标题】:r apply function over two listsr 在两个列表上应用函数
【发布时间】:2016-09-29 21:25:57
【问题描述】:

我有两个向量。我想对这两个向量的每个可能组合应用一个函数。为了说明,假设我有以下两个向量。

pets <- c('dog','cat','lemur')
fruit <- c('banana','apple','papaya')

我想将一个函数应用于以下变量组合,并将每个函数调用的结果与变量值一起保存。

[dog, banana]
[dog, apple]
[dog, papaya]
[cat, banana]
[cat, apple] etc...

在 r 中实现这一目标的最佳方法是什么?感觉应该是应聘家庭的工作。

【问题讨论】:

  • 可能是expand.grid(pets, fruit)
  • 我看到 expand.grid 创建了两个向量的每个组合,但是我希望在每个组合上运行一个函数
  • 你可以试试这样的dplyr::mutate(expand.grid(pets, fruit), function_output=paste(Var1, Var2)) paste() 是一个示例函数

标签: r function apply lapply


【解决方案1】:
levels(interaction(pets, fruit, sep = ', '))

输出:

[1] "cat, apple"    "dog, apple"    "lemur, apple" 
[4] "cat, banana"   "dog, banana"   "lemur, banana"
[7] "cat, papaya"   "dog, papaya"   "lemur, papaya"

【讨论】:

  • 嗨@datavoredan,如果这个或任何答案已经解决了您的问题,请考虑通过单击复选标记接受它。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
【解决方案2】:

expand.grid 是你想要的。 ?expand.grid 声明:

根据提供的向量或因子的所有组合创建数据框。

所以你可以这样做:

e <- expand.grid(pets, fruit)
df <- data.frame(col=apply(e,1,function(x) paste0("[",x[1],", ",x[2],"]")))
# OR if brackets are not important
# data.frame(col=apply(e,1,paste,collapse=", "))

            # col
# 1   [dog, banana]
# 2   [cat, banana]
# 3 [lemur, banana]
# 4    [dog, apple]
# 5    [cat, apple]
# 6  [lemur, apple]
# 7   [dog, papaya]
# 8   [cat, papaya]
# 9 [lemur, papaya]

请注意,数据框e 已经包含两个向量的可能组合。仅当您要对其进行格式化时才需要下一行。

【讨论】:

    猜你喜欢
    • 2014-12-19
    • 2016-02-02
    • 2016-07-21
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2013-09-30
    相关资源
    最近更新 更多