Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有for循环的情况下实现高效的基于条件的数据映射?_R_Data.table - Fatal编程技术网

在没有for循环的情况下实现高效的基于条件的数据映射?

在没有for循环的情况下实现高效的基于条件的数据映射?,r,data.table,R,Data.table,我有一个大于18 mil行的表(与多个对象相关的多个事件),我正在尝试创建一个映射列,以确定一个对象是否具有相同的事件发生序列 示例数据框(使用data.table提高效率): aa基于数据表的解决方案。这样做的目的是计算每个id和val的行号,然后检查该行号是否与每个id的总行号相同 library(data.table) aa[, Count := .N, by = .(id, val)][ , noswitch := Count == .N, by = id][ , Coun

我有一个大于18 mil行的表(与多个对象相关的多个事件),我正在尝试创建一个映射列,以确定一个对象是否具有相同的事件发生序列

示例数据框(使用data.table提高效率):


aa基于
数据表的解决方案。这样做的目的是计算每个
id
val
的行号,然后检查该行号是否与每个
id
的总行号相同

library(data.table)

aa[, Count := .N, by = .(id, val)][
  , noswitch := Count == .N, by = id][
    , Count := NULL][]
#     id val noswitch
#  1:  1   a    FALSE
#  2:  1   a    FALSE
#  3:  1   b    FALSE
#  4:  1   a    FALSE
#  5:  4   c     TRUE
#  6:  4   c     TRUE
#  7:  4   c     TRUE
#  8:  5   a    FALSE
#  9:  5   b    FALSE
# 10:  5   c    FALSE
# 11:  5   a    FALSE
# 12:  5   b    FALSE

您还可以利用
data.table::uniqueN

library(data.table)
dt[, noswitch := uniqueN(val) == .N, id]

我发现这个解决方案更容易阅读,但请注意它没有第一个解决方案快。

这是一个很好的解决方案,执行时间是几秒钟,而不是几天!太神了非常感谢。
library(data.table)

aa[, Count := .N, by = .(id, val)][
  , noswitch := Count == .N, by = id][
    , Count := NULL][]
#     id val noswitch
#  1:  1   a    FALSE
#  2:  1   a    FALSE
#  3:  1   b    FALSE
#  4:  1   a    FALSE
#  5:  4   c     TRUE
#  6:  4   c     TRUE
#  7:  4   c     TRUE
#  8:  5   a    FALSE
#  9:  5   b    FALSE
# 10:  5   c    FALSE
# 11:  5   a    FALSE
# 12:  5   b    FALSE
library(data.table)
dt[, noswitch := uniqueN(val) == .N, id]