相关疑难解决方法(0)

结合"by"和"on"来连接并创建data.table的汇总列

我有两个数据集,一个是详细的数据集,weight另一个是应该是摘要数据集.我试图通过加入详细数据集和聚合来创建摘要数据集,但它没有按预期工作.

这是一个示例代码.

mytesta <- data.table(cola = c("a","b"), groupa = c(1,2))  # summary
mytestb <- data.table(groupa = c(1,1,1,1,2,2,2), weighta = c(10,20,30,25,15,30,10))  #detail
Run Code Online (Sandbox Code Playgroud)

这是我想要的输出.

   cola groupa weighta
1:    a      1      85
2:    b      2      55
Run Code Online (Sandbox Code Playgroud)

我试图做的是,

mytesta[mytestb, on = "groupa", weight_summary := sum(i.weighta), by = "groupa"]
Run Code Online (Sandbox Code Playgroud)

问题是当by使用时,内部data.table的列消失(例如mytesta[mytestb, on = "groupa", .SD, by = "groupa"]).有没有解决的办法?

r data.table

5
推荐指数
1
解决办法
86
查看次数

查找每个ID的重叠日期,并为重叠创建新行

我想找到每个ID的重叠日期,并创建一个重叠日期的新行,并组合行的字符(char).我的数据可能有> 2个重叠,需要> 2个字符组合.例如.ERM

数据:

ID    date1         date2       char
15  2003-04-05  2003-05-06      E
15  2003-04-20  2003-06-20      R
16  2001-01-02  2002-03-04      M
17  2003-03-05  2007-02-22      I   
17  2005-04-15  2014-05-19      C
17  2007-05-15  2008-02-05      I
17  2008-02-05  2012-02-14      M
17  2010-06-07  2011-02-14      V
17  2010-09-22  2014-05-19      P
17  2012-02-28  2013-03-04      R
Run Code Online (Sandbox Code Playgroud)

输出我想:

ID  date1       date2           char
15  2003-04-05  2003-04-20      E
15  2003-04-20  2003-05-06      ER
15  2003-05-06  2003-06-20      R
16  2001-01-02  2002-03-04      M
17  2003-03-05  2005-04-15      I
17  2005-04-15  2007-02-22      IC
17  2005-04-15  2007-05-15 …
Run Code Online (Sandbox Code Playgroud)

r date overlap overlapping-matches

5
推荐指数
2
解决办法
915
查看次数

如何计算R中data.table中的出现组合

我有两个data.tables.我想计算与另一个表中的表的组合匹配的行数.我检查了data.table文档,但我没有找到答案.我正在使用data.table 1.9.2.

DT1 <- data.table(a=c(3,2), b=c(8,3))
DT2 <- data.table(w=c(3,3,3,2,3), x=c(8,8,8,3,7), z=c(2,6,7,2,2))
DT1
#    a b
# 1: 3 8
# 2: 2 3

DT2
#    w x z
# 1: 3 8 2
# 2: 3 8 6
# 3: 3 8 7
# 4: 2 3 2
# 5: 3 7 2
Run Code Online (Sandbox Code Playgroud)

现在我想计算DT2中(3,8)对和(2,3)对的数量.

setkey(DT2, w, x)
nrow(DT2[J(3, 8), nomatch=0])
# [1] 3    ## OK !

nrow(DT2[J(2, 3), nomatch=0])
# [1] 1    ## OK !

DT1[,count_combination_in_dt2 := nrow(DT2[J(a, b), nomatch=0])] …
Run Code Online (Sandbox Code Playgroud)

r summarization data.table

4
推荐指数
2
解决办法
3144
查看次数

将dplyr连接语法转换为纯data.table语法

我正在学习data.table.我很难转换dplyr连接语法.您能为以下测试用例推荐data.table等价吗?

library(data.table)
library(dplyr)

dtProduct <- data.table(
    ProductID  = c(6, 33, 17, 88, 44, 51),
    ProductName= c("Shirt", "Helmet", "Gloves", "Towel", "Chair", "Detergent"),
    Price= c(25, 60, 10, 7.5, 135, 16),
    key = 'ProductID'
)

set.seed(20141216)
dtOrder <- data.table(
    OrderID    = sample(1001:9999, 12),
    CustomerID = sample(271:279, 12, replace=TRUE),
    # NOTE: some non-existent ProductID intentionally introduced
    ProductID  = sample(c(dtProduct[, ProductID], 155, 439), 12, replace=TRUE),
    Qty = sample(1:3, 12, replace=TRUE),
    key = 'OrderID'
)

> tables()
     NAME      NROW NCOL MB COLS                             KEY      
[1,] dtOrder     12 …
Run Code Online (Sandbox Code Playgroud)

join r dplyr data.table

4
推荐指数
2
解决办法
470
查看次数

计算比其他行“小的”行数,同时避免循环

我需要根据列值计算与特定行不同的行数,同时避免循环解决方案。

示例:取一个有四行的data.table对象,其中每行代表一个人。A每个人都有3个价值观v1, v2, v3。目标是计算对于特定个体(行),有多少其他个体的所有三个变量的值都严格大于(或等于),并计入变量 中count。完成这项工作的循环版本可能是:

A = data.table(matrix(0,  nrow = 4, ncol = 3))

colnames(A) <- c("v1","v2","v3")

# Assign values for variables v1, v2, v3
A[1,1] <- 1; A[1,2] <- 1; A[1,3] <- 1
A[2,1] <- 1; A[2,2] <- 1.5; A[2,3] <- 1
A[3,1] <- 0.9; A[3,2] <- 0.5; A[3,3] <- 0.8
A[4,1] <- 2; A[4,2] <- 1.5; A[4,3] <- 2

# Count variable 
A$count = NA

for(j in 1:nrow(A)){
  A$count[j] = …
Run Code Online (Sandbox Code Playgroud)

r count data.table

2
推荐指数
1
解决办法
144
查看次数

在 R data.table 中获取每组前 k 条记录,其中 k 因组而异

我有两个data.table

  1. k要从中提取顶部的值,每个group.
  2. group到要k为其选择的值的映射group

如何在 R 数据框中按组或在类别内(按组)查找前 N 个值解决了这个问题,当k不因组而异时。我怎样才能做到这一点?这是示例数据和所需的结果:

价值观:

(dt <- data.table(id=1:10,
                  group=c(rep(1, 5), rep(2, 5))))
#     id group
#  1:  1     1
#  2:  2     1
#  3:  3     1
#  4:  4     1
#  5:  5     1
#  6:  6     2
#  7:  7     2
#  8:  8     2
#  9:  9     2
# 10: 10     2
Run Code Online (Sandbox Code Playgroud)

映射groupk

(group.k <- …
Run Code Online (Sandbox Code Playgroud)

r data.table

1
推荐指数
1
解决办法
737
查看次数

基于列和行在R中合并

对于示例数据框:

survey <- structure(list(id = 1:10, cntry = structure(c(2L, 3L, 1L, 2L, 
2L, 3L, 1L, 1L, 3L, 2L), .Label = c("DE", "FR", "UK"), class = "factor"), 
    age.cat = structure(c(1L, 1L, 2L, 4L, 1L, 3L, 4L, 4L, 1L, 
    2L), .Label = c("Y_15.24", "Y_40.54", "Y_55.plus", "Y_less.15"
    ), class = "factor")), .Names = c("id", "cntry", "age.cat"
), class = "data.frame", row.names = c(NA, -10L))
Run Code Online (Sandbox Code Playgroud)

我想添加一个名为'age.cat'的额外列,该列由另一个数据帧填充:

age.cat <- structure(list(cntry = structure(c(2L, 3L, 1L), .Label = c("DE", 
    "FR", "UK"), class = "factor"), Y_less.15 = c(0.2, …
Run Code Online (Sandbox Code Playgroud)

merge r dataframe

1
推荐指数
1
解决办法
97
查看次数