首页 > 解决方案 > R:如何将单个列作为输入变量使用逐行应用?

问题描述

我创建了一个列表,其中包含 data.table 中两列的所有唯一组合。

基于此列表中的所有独特组合,我想从 data.table 中获取样本。

我已经为此编写了一个函数,并且我知道我可以使用 for 循环或 foreach 循环。下面的函数如何与“应用”或其变体之一一起使用?

非常感谢 :-)

MWE:

dt <- data.table(filename = c("a", "b", "c", "c", "a"), class = c(1,2,1,1,4), var = c(1,2,3,4,5))
unique_combinations <- unique(dt[, c("filename", "class")])

take_samples <- function(dt, filename, class, n) {
  dt %>%
    .[filename==filename & class==class] %>%
    sample_n(size=n, replace = FALSE)

  #TBD: append result to other data.table
}

# How to do the following call automatically for every unique combination using apply?
take_samples(dt, unique_combinations$filename[0], unique_combinations$class[0], 1)

标签: r

解决方案


我认为你需要groupby:

n <- 1
dt[,.SD[sample(.N, size = n, replace = T)], .(filename, class)]

解释

  • 分组依据.(filename, class)将采用两列的唯一组合。
  • .SD包含分组的数据框。

这是输出的样子:

   filename class var
1:        a     1   1
2:        b     2   2
3:        c     1   4
4:        a     4   5

推荐阅读