r - 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)
解决方案
我认为你需要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
推荐阅读
- rust - 来自同一个 git 存储库的具有冲突功能的货物构建包?
- java - javax.naming.ConfigurationException 不包含 IOR
- php - Laravel 表连接
- python-3.x - 检查用户是否已经投票,即使他们还没有投票,也会返回 true?
- jestjs - 方法“模拟”意味着在 1 个节点上运行。找到了 0 个
- scala - 使用 Try out of Exception 上下文
- java - java.lang.NullPointerException:ava.io.File android.content.Context.getCacheDir()' 为空
- c# - 文件 Designer.cs 错误地嵌套在解决方案资源管理器中,无法移动
- javascript - 无法从子进程获取管道流
- angular - 用于生产的 Angular 应用程序上的代理配置