相关疑难解决方法(0)

与data.tables的非连接

我有一个关于data.table"非连接"成语的问题,灵感来自Iterator的问题.这是一个例子:

library(data.table)

dt1 <- data.table(A1=letters[1:10], B1=sample(1:5,10, replace=TRUE))
dt2 <- data.table(A2=letters[c(1:5, 11:15)], B2=sample(1:5,10, replace=TRUE))

setkey(dt1, A1)
setkey(dt2, A2)
Run Code Online (Sandbox Code Playgroud)

data.table看起来像这样

> dt1               > dt2
      A1 B1               A2 B2
 [1,]  a  1          [1,]  a  2
 [2,]  b  4          [2,]  b  5
 [3,]  c  2          [3,]  c  2
 [4,]  d  5          [4,]  d  1
 [5,]  e  1          [5,]  e  1
 [6,]  f  2          [6,]  k  5
 [7,]  g  3          [7,]  l  2
 [8,]  h  3          [8,] …
Run Code Online (Sandbox Code Playgroud)

r data.table

14
推荐指数
2
解决办法
1688
查看次数

删除data.table中的范围

我试图从数据表中排除一些行,比如天数和月份 - 不包括例如暑假,这些行总是从6月15日开始到下个月15日结束.我可以根据Date提取那些日子,但是as.Date函数运行速度非常慢,我有月和日的单独整数列,我想只使用它们.

通过选择给定的条目很容易

DT[Month==6][Day>=15]
DT[Month==7][Day<=15]
Run Code Online (Sandbox Code Playgroud)

有没有办法如何使两者data.tables(原始的和我选择的)"差异" .(为什么不是子集?也许我错过了一些简单的东西,但我不想排除像10/6,31/7这样的日子.)

我知道有一种方法可以通过加入来实现,但只是日复一日

setkey(DT, Month, Day)
DT[-DT[J(Month,Day), which= TRUE]]
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助如何以更一般的方式解决它?

r data.table

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

将R的数据帧中的集合操作移植到数据表:如何识别重复的行?

[更新1:正如Matthew Dowle所说,我data.table在R-Forge上使用的是1.6.7版本,而不是CRAN.您不会在早期版本中看到相同的行为data.table.]

作为背景:我正在移植一些小实用程序函数来对数据帧的行或数据帧对进行集合操作(​​即每行是一个集合中的元素),例如唯一 - 从列表中创建集合,union,交叉点,设置差,等,这些模拟物Matlab的intersect(...,'rows'),setdiff(...,'rows')等等,这似乎不具有R中的对应(R的集合操作仅限于载体和列表,而不是基质或数据帧的行).这些小功能的例子如下.如果数据框的这种功能已经存在于某个包或基础R中,我愿意接受建议.

我一直在将这些迁移到数据表,当前方法中的一个必要步骤是查找重复的行.当duplicated()执行返回一个错误,指出数据表必须有钥匙.这是一个不幸的障碍 - 除了设置密钥,这不是一个通用的解决方案,并增加计算成本,还有其他方法来查找重复的对象?

这是一个可重复的例子:

library(data.table)
set.seed(0)
x   <- as.data.table(matrix(sample(2, 100, replace = TRUE), ncol = 4))
y   <- as.data.table(matrix(sample(2, 100, replace = TRUE), ncol = 4))

res3    <- dt_intersect(x,y)
Run Code Online (Sandbox Code Playgroud)

产生此错误消息:

Error in duplicated.data.table(z_rbind) : data table must have keys
Run Code Online (Sandbox Code Playgroud)

代码按原样用于数据帧,尽管我已经用模式命名了每个函数dt_operation.

有没有办法解决这个问题?设置键仅适用于整数,这是我不能为输入数据假设的约束.那么,也许我错过了一种使用数据表的聪明方法?


示例设置操作函数,其中集合的元素是数据行:

dt_unique       <- function(x){
    return(unique(x))
}

dt_union        <- function(x,y){
    z_rbind     <- rbind(x,y)
    z_unique    <- dt_unique(z_rbind)
    return(z_unique)
}

dt_intersect    <- function(x,y){
    zx          <- …
Run Code Online (Sandbox Code Playgroud)

r dataframe set-operations data.table

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

R中的非交叉值

我有两个数据集,每个数据集至少有420,500个观测值,例如

dataset1 <- data.frame(col1=c("microsoft","apple","vmware","delta","microsoft"),
                     col2=paste0(c("a","b","c",4,"asd"),".exe"),
                     col3=rnorm(5))

dataset2 <- data.frame(col1=c("apple","cisco","proactive","dtex","microsoft"),
                     col2=paste0(c("a","b","c",4,"asd"),".exe"),
                     col3=rnorm(5))
> dataset1
       col1    col2 col3
1 microsoft   a.exe    2
2     apple   b.exe    1
3    vmware   c.exe    3
4     delta   4.exe    4
5 microsoft asd.exe    5
> dataset2
       col1    col2 col3
1     apple   a.exe    3
2     cisco   b.exe    4
3    vmware   d.exe    1
4     delta   5.exe    5
5 microsoft asd.exe    2
Run Code Online (Sandbox Code Playgroud)

我想打印在所有的意见dataset1相交的dataset2(比较两个col1col2每个),在这种情况下将打印一切,除了最后一个观察-观察1&2的比赛上col2,但不col1与观察3&4的比赛上col1但不是col2,即: …

intersection r

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

标签 统计

r ×4

data.table ×3

dataframe ×1

intersection ×1

set-operations ×1