当前位置: 首页 > 知识库问答 >
问题:

选择数据。表R基于行数和条件的行

慕胡媚
2023-03-14

data.table,我们可以根据行号或条件选择行:

> x <- data.table(letters[1:4], 1:4)
> x
   V1 V2
1:  a  1
2:  b  2
3:  c  3
4:  d  4
> x[2]
   V1 V2
1:  b  2
> x[V1 == "d"]
   V1 V2
1:  d  4

但是,我不能同时选择行数和条件:

> x[!2 & V2 > 1]
Empty data.table (0 rows) of 2 cols: V1,V2

这可能是因为!2在这种格式下没有被解释为行号。我知道我可以链接这两个条件:

> x[!2][V2 > 1]
   V1 V2
1:  c  3
2:  d  4

但是我想为这个子集分配新的列值

x[!2][V2 > 1, V3 := "more"]

现在,它只为中间链接的 data.table 创建了列。我可以保存中间表,然后合并回原始表,但那会很麻烦。

实际上,我经常觉得 data.table 需要一个正确的行号。。我是一个依赖于组的动态数字,但我想要一个可以识别每一行的唯一ID,这个唯一的id在合并/连接中非常有用(通常数据没有唯一的ID)。如果 .i 是行号,我可以使用

x[(.i != 2) & (V2 >1), V3 := "more"]

我可以通过首先显式创建行号列来模拟这一点。

另一种方法是对子集data.table进行修改,然后应用回原始表。假设我们有x作为原始表,x[!2]作为子集,那么如果在< code>x[!2]实际修改x,我的问题也就解决了。当然,这种子集需要以不同方式创建,例如< code>x[!2,refOriginal = TRUE]。

共有1个答案

魏松
2023-03-14

以下是我对解决方案的两次尝试:第一次使用data.table的汇总语法来计算使用行号的逻辑向量。I 和位置 i 处的条件用于子集化和更新列;第二个使用哪个setdiff 从条件中删除某些行号,另一方面,如果您需要行号条件的和操作,setdiff 可以用并集替换:

x[x[, .I != 2 & V2 > 2], V3 := "more"]
x
#    V1 V2   V3
# 1:  a  1   NA
# 2:  b  2   NA
# 3:  c  3 more
# 4:  d  4 more


x[setdiff(which(V2 > 2), c(2)), V3 := "more"]
x
#    V1 V2   V3
# 1:  a  1   NA
# 2:  b  2   NA
# 3:  c  3 more
# 4:  d  4 more
 类似资料:
  • 我有一个在data.table中选择行的特定问题,到目前为止还没有设法解决它。我有一个数据集,用于存储一系列参数的仿真结果。数据集中的列包含参数或结果值,请参阅下面的代码(“p”表示参数列,“v”表示值列。 我现在想提取:对于每个p1,对于给定的p2和p3值,对于p4,p5的任意值,v1的值是最小的行。设 np4 和 np5 是 p4 和 p5 的唯一值的数量,对于每个唯一的 p1 并给定 p2,

  • 输入的dput() 结构(列表(Varname=structure(1:6,.标签=c(“A”,“B”,“c”,“D”,“E”,“F”),类=“因子”),成分=结构(c(3L,1L,1L,4L,2L,1L),标签=c(“”,“A,c”,“B”,“c”),类=“因子”),名字=结构(c(5L,3L,2L,4L,6L),标签=c(“”,“鲍勃”,“凯茜”,“迪克,南希”,“杰克,布鲁斯”,“曼迪”),

  • 假设我有一个7列的数据帧,有些行有7个值,有些行的NAs超过了某个点。我想抓住最后一个值(从左到右),不是NA,然后直接向左的值。它是分层数据,但有些组比其他组更深。我想要最深和第二深的组在一个新的数据帧的两列。 这段代码可以工作,但对于46K观测值的数据帧,我的内存已达到最大。有没有比这更有效的方法? 第一次发帖。通常我可以拼凑我需要从这个网站。提前感谢。

  • 本文向大家介绍从基于特定月份的MySQL表中选择数据?,包括了从基于特定月份的MySQL表中选择数据?的使用技巧和注意事项,需要的朋友参考一下 使用MySQL中的方法选择基于月份的日期。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 输出结果 这将产生以下输出- 以下是根据特定月份从表中选择数据的查询- 输出结果 这将产生以下输出-

  • 问题内容: 我有一张叫的桌子。在该表中,我有以下栏目:,,, 我有另一个表,唯一重要的列是,我想将其与表行进行比较。 该表如下所示: 假设我有一个表(user_meta)像这样: 我想为每个检索单个行,但前提是公司ID和user_type正确。 我想检索在查询中发送的具有相同companyID的所有用户,因此,假设$ companyID = 2,然后所有具有=’staff’的用户。 因此,user