首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在data.table中,按组在特定时间内删除相同的连续值。

在data.table中,按组在特定时间内删除相同的连续值。
EN

Stack Overflow用户
提问于 2019-11-15 00:24:42
回答 2查看 97关注 0票数 4

data.table中,如果某个列的值在一定次数内连续发生,则我希望删除相应的行。我也想分组做这件事。

例如,假设dt是我的data.table。如果同一值在按Petal.Width分组的Species中连续发生2次以上,我希望删除行。

代码语言:javascript
复制
dt <- iris[c(1:3, 7:7, 51:53, 62:63), ]
setDT(dt)
#    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
# 1           5.1         3.5          1.4         0.2     setosa
# 2           4.9         3.0          1.4         0.2     setosa
# 3           4.7         3.2          1.3         0.2     setosa
# 7           4.6         3.4          1.4         0.3     setosa
# 51          7.0         3.2          4.7         1.4 versicolor
# 52          6.4         3.2          4.5         1.5 versicolor
# 53          6.9         3.1          4.9         1.5 versicolor
# 62          5.9         3.0          4.2         1.5 versicolor
# 63          6.0         2.2          4.0         1.0 versicolor

期望的结果是具有以下行的data.table。

代码语言:javascript
复制
# 7           4.6         3.4          1.4         0.3     setosa
# 51          7.0         3.2          4.7         1.4 versicolor
# 63          6.0         2.2          4.0         1.0 versicolor
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-15 00:32:09

以下是一个选择:

代码语言:javascript
复制
library(data.table)
setDT(dt)[dt[,{
    rl <- rleid(Species, Petal.Width)
    rw <- rowid(rl)
    .I[!rl %in% rl[rw > 1]]
}]]

产出:

代码语言:javascript
复制
   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1:          4.6         3.4          1.4         0.3     setosa
2:          7.0         3.2          4.7         1.4 versicolor
3:          6.0         2.2          4.0         1.0 versicolor
票数 5
EN

Stack Overflow用户

发布于 2019-11-15 00:33:04

这里有一个选择:

代码语言:javascript
复制
library(data.table)

dt <- iris[c(1:3, 7:7, 51:53, 62:63), ]
setDT(dt)

dt[dt[, .I[.N < 3], by = .(rleid(Petal.Width), Species)]$V1]

感谢@chinsoon12 12建议将rleid()封装在Pedal.Width周围,以筛选出连续的值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58868550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档