使用 data.table
分配给多个列的最佳方法是什么?例如:
f <- function(x) {c("hi", "hello")}
x <- data.table(id = 1:10)
我想这样做(当然这个语法是不正确的):
x[ , (col1, col2) := f(), by = "id"]
为了扩展这一点,我可能将许多列的名称存储在一个变量中(比如< code>col_names),我想这样做:
x[ , col_names := another_f(), by = "id", with = FALSE]
这样做的正确方法是什么?
以下速记符号可能有用。所有功劳都归功于安德鲁·布鲁克斯,特别是这篇文章。
dt[,`:=`(avg=mean(mpg), med=median(mpg), min=min(mpg)), by=cyl]
这现在适用于 R-Forge 上的 v1.8.3。感谢您强调它!
x <- data.table(a = 1:3, b = 1:6)
f <- function(x) {list("hi", "hello")}
x[ , c("col1", "col2") := f(), by = a][]
# a b col1 col2
# 1: 1 1 hi hello
# 2: 2 2 hi hello
# 3: 3 3 hi hello
# 4: 1 4 hi hello
# 5: 2 5 hi hello
# 6: 3 6 hi hello
x[ , c("mean", "sum") := list(mean(b), sum(b)), by = a][]
# a b col1 col2 mean sum
# 1: 1 1 hi hello 2.5 5
# 2: 2 2 hi hello 3.5 7
# 3: 3 3 hi hello 4.5 9
# 4: 1 4 hi hello 2.5 5
# 5: 2 5 hi hello 3.5 7
# 6: 3 6 hi hello 4.5 9
mynames = c("Name1", "Longer%")
x[ , (mynames) := list(mean(b) * 4, sum(b) * 3), by = a]
# a b col1 col2 mean sum Name1 Longer%
# 1: 1 1 hi hello 2.5 5 10 15
# 2: 2 2 hi hello 3.5 7 14 21
# 3: 3 3 hi hello 4.5 9 18 27
# 4: 1 4 hi hello 2.5 5 10 15
# 5: 2 5 hi hello 3.5 7 14 21
# 6: 3 6 hi hello 4.5 9 18 27
x[ , get("mynames") := list(mean(b) * 4, sum(b) * 3), by = a][] # same
# a b col1 col2 mean sum Name1 Longer%
# 1: 1 1 hi hello 2.5 5 10 15
# 2: 2 2 hi hello 3.5 7 14 21
# 3: 3 3 hi hello 4.5 9 18 27
# 4: 1 4 hi hello 2.5 5 10 15
# 5: 2 5 hi hello 3.5 7 14 21
# 6: 3 6 hi hello 4.5 9 18 27
x[ , eval(mynames) := list(mean(b) * 4, sum(b) * 3), by = a][] # same
# a b col1 col2 mean sum Name1 Longer%
# 1: 1 1 hi hello 2.5 5 10 15
# 2: 2 2 hi hello 3.5 7 14 21
# 3: 3 3 hi hello 4.5 9 18 27
# 4: 1 4 hi hello 2.5 5 10 15
# 5: 2 5 hi hello 3.5 7 14 21
# 6: 3 6 hi hello 4.5 9 18 27
使用< code>with参数的旧版本(我们尽可能不建议使用此参数):
x[ , mynames := list(mean(b) * 4, sum(b) * 3), by = a, with = FALSE][] # same
# a b col1 col2 mean sum Name1 Longer%
# 1: 1 1 hi hello 2.5 5 10 15
# 2: 2 2 hi hello 3.5 7 14 21
# 3: 3 3 hi hello 4.5 9 18 27
# 4: 1 4 hi hello 2.5 5 10 15
# 5: 2 5 hi hello 3.5 7 14 21
# 6: 3 6 hi hello 4.5 9 18 27
问题内容: 我有一个这样的PHP数组: 因此,如何通过url_id 获取基于组的SUM(使用array_count_values) 问题答案: 为什么不更简单
我试图把我对plyr的理解转移到dplyr中,但是我不知道如何按多个列分组。 在将plyr示例翻译成dplyr式语法时,我遗漏了什么? 编辑2017:Dplyr已更新,因此可以使用更简单的解决方案。查看当前选定的答案。
问题内容: 我想从表中选择2列,并为每个值分配一个int值。但是,我希望第一列ID对于所有相同的值都相同。 对于第二列,我希望每个值也要编号,但要按第一列进行分区。我已经弄清楚了这部分,但是我无法使第一部分开始工作。 这是我正在使用的测试方案。 当我运行它时,Column2_ID中的值是正确的,但是我希望Column1_ID的值如下。 问题答案: 您只需要使用其他排名功能, http://msdn
问题内容: 我明白这一点。 但是,它是如何工作的,又意味着什么呢? 问题答案: 意味着 将所有具有相同X值的那些放在一组 。 意味着 将所有具有相同X和Y值的那些放在一组中 。 为了举例说明,假设我们有一个下表,该表与谁在大学里修读什么科目有关: 仅在主题列上使用a时;说: 您将获得类似以下内容的信息: …因为ITB001有5个条目,MKB114有2个条目 如果我们要到两列: 我们会得到这个: 这
问题内容: 我有一个SQLite数据库,其中包含交易,每个交易都有一个 价格 和一个 transDate 。 我想检索按月分组的交易总和。检索到的记录应类似于以下内容: 问题答案: 当您按MONTH分组时总是很好,还应该检查YEAR 对于SQLITE
问题内容: 我有这个数据框: 我想按名称和日期进行汇总以获取数量总和。详细信息: 日期 :组,结果应在星期初(或仅在星期一) 数量 :两个或多个记录具有相同的名称和日期(如果属于相同间隔)的总和 所需的输出如下: 提前致谢 问题答案: 首先转换列 并减去一个星期,因为我们要对日期之前一周进行累加,而不是该日期之前一周。 然后通过W-MON使用with并进行聚合: