我有数据.带有{id,menuitem,amount}字段的表.

这是事务数据——因此,ID是唯一的,但menuitem会重复.现在,我想删除所有menuitem == 'coffee'的条目.

此外,要删除所有包含amount <= 0行的行;

在数据中,正确的方法是什么.桌子

我可以使用data$menuitem!='coffee',然后将int索引到数据[]中——但这并不一定有效,也不利用数据.桌子

任何指向正确方向的指示都是值得赞赏的.

推荐答案

在这种情况下,它与data.frame没有太大区别

data <- data[ menuitem != 'coffee' | amount > 0] 

通过引用删除/添加行,这将被实现.你可以在this question中找到更多信息

关于速度:

1您可以通过以下操作从密钥中获益:

setkey(data, menuitem)
data <- data[!"coffee"]

data <- data[ menuitem != 'coffee']快.然而,要应用你在问题中提出的相同过滤器,你需要一个滚动连接(我已经完成了午餐休息,我可以稍后添加一些内容:-)).

2即使没有关键数据.对于相对较大的表,表的速度要快得多(对于少量行,速度类似)

dt<-data.table(id=sample(letters,1000000,T),var=rnorm(1000000))
df<-data.frame(id=sample(letters,1000000,T),var=rnorm(1000000))
library(microbenchmark)
> microbenchmark(dt[ id == "a"], df[ df$id == "a",])
Unit: milliseconds
               expr       min        lq    median        uq       max neval
      dt[id == "a"]  24.42193  25.74296  26.00996  26.35778  27.36355   100
 df[df$id == "a", ] 138.17500 146.46729 147.38646 149.06766 154.10051   100

R相关问答推荐

使用gsim删除特殊词

R数据帧中的布尔加法会产生布尔值而不是整值

导入到固定列宽的R中时出现问题

使用scale_x_continuous复制ggplot 2中的离散x轴

使用ggplot 2根据R中的类别排列Likert比例gplot

如何根据条件计算时差(天)

打印XTS对象

如何在PackageStatus()中列出&q;不可用的包&q;?

使用R中的dist()迭代ID匹配的欧几里德距离

将标识符赋给事件序列,避免错误观察

从多个可选列中选取一个值到一个新列中

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

根据r中另一个文本列中给定的范围对各列求和

有没有办法将不等长的列表转换为R中的数据帧

计算使一组输入值最小化的a、b和c的值

有没有办法将基于每个值中出现的两个关键字或短语的字符串向量重新编码为具有这两个值的新向量?

是否有可能从边界中找到一个点值?

我需要使用ggplot2制作堆叠条形图

使用同一行中的前一个值填充R矩阵中的缺失值

如何在R中使用因子行求和?