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

样本数据。具有不同条件的表行

欧阳楚
2023-03-14

我有一个多列的数据表。这些列中的一列当前作为“键”工作(例如< code>keyb)。另一列(假设< code>A)中可能有数据,也可能没有数据。我想提供一个向量,每个键随机采样两行,-如果这个键出现在向量中,其中一行包含< code>A中的数据,而另一行不包含。

MRE:

#data.table
trys <- structure(list(keyb = c("x", "x", "x", "x", "x", "y", "y", "y", 
"y", "y"), A = c("1", "", "1", "", "", "1", "", "", "1", "")), .Names = c("keyb", 
"A"), row.names = c(NA, -10L), class = c("data.table", "data.frame"
))
setkey(trys,keyb)

#list with keys
list_try <- structure(list(a = "x", b = c("r", "y","x")), .Names = c("a", "b"))

例如,我可以将<code>数据子集。表基于<code>list_try

trys[keyb %in% list_try[[2]]]

我最初的想法(也可能是低效的想法)是尝试链接每个键两行的样本,其中< code>A列有数据或没有数据,然后合并。但是它不起作用:

#here I was trying to sample rows based on whether A has data or not
#here for rows where A has no data
trys[keyb %in% list_try[[2]]][nchar(A)==0][sample(.N, 2), ,by = keyb]
#here for rows where A has data
trys[keyb %in% list_try[[2]]][nchar(A)==1][sample(.N, 2), ,by = keyb]

在这种情况下,我的预期输出将是两个data.tables(一个用于a,一个用于list_try中的b),每个出现的元素两行:因此,来自a的data.table将有两行(A中有数据和没有数据),来自b的data.table将有四行(A中有数据和没有数据)。

请让我知道,如果我能使这篇文章更清晰

共有1个答案

袁帅
2023-03-14

您也可以将A添加到by语句中,同时通过修改A ! = "" 将其转换为二进制向量,并结合二进制连接(同时添加namatch=0L以删除不匹配项),然后您可以从行索引中进行采样。我通过这两个聚合器,然后从原始数据集中进行子集

对于单个子集情况:

trys[trys[list_try[[2]], nomatch = 0L, sample(.I, 1L), by = .(keyb, A != "")]$V1]
#    keyb A
# 1:    y 1
# 2:    y  
# 3:    x 1
# 4:    x  

对于更一般的情况,当您要根据密钥列表创建单独的数据集时,您可以轻松地将其嵌入到lapply

lapply(list_try, 
       function(x) trys[trys[x, nomatch = 0L, sample(.I, 1L), by = .(keyb, A != "")]$V1]) 
# $a
# keyb A
# 1:    x 1
# 2:    x  
# 
# $b
# keyb A
# 1:    y 1
# 2:    y  
# 3:    x 1
# 4:    x  

 类似资料:
  • 问题内容: 我正在使用ajax加载数据并在DataTable中动态生成列名。我的数据表具有不同的列数,具体取决于用户的选择。(有一个下拉列表)。 例如,下拉列表中有2个选项,即“ 南部省” 和“ 北部省” 。 南部省 表有4列, 北部省 表有6列。 场景1 第一个用户选择具有4列的 Southern Province 。然后它生成的表没有错误,但是在此之后,如果用户选择具有6列的 Northern

  • 我正在使用的数据库有许多具有相同列但(显然)具有不同表名的表(不是我设计的)。例如(这些是数据库表名): 有没有可能用JPA和Hibernate将这些映射到一个Java类实体?类的名称是,然后在使用它时传入例如,以便对象使用表? 还是只使用普通的、普通的Java对象来完成这样的任务更好? 谢谢你!

  • 我有2个不同大小的数据帧df1-df2(df2比df1有更多的行和列)。 我试图分配的值从df2['率']到df1['率'],在其中df1['单元']==df2['单元']行。 期望的输出是 我尝试了不同的方法: 只能比较相同标记的Series对象 给我假消息 我认为这来自于这样一个事实,即两个数据帧从一开始就有不同的大小。然而,我不明白为什么它应该阻止它做比较。我不确定如何从这里开始。

  • 问题内容: 我正在这样处理我的问题: 但是为了避免在控制器端具有此功能,我更喜欢这样做: 我怎样才能做到这一点? 问题答案: 正如@Yoshi所说,从1.1.5角度开始,您可以使用它而无需进行任何更改。 如果使用angular <1.1.5,则可以使用ng- class 。

  • 问题内容: 我想知道用户是否在2个相关表中的 任何 一个条目。 桌子 用户可以有一个雇员和/或学生的条目。如何在一个查询中获取该信息?我试过了: 但是它将仅返回在 两个 表中 都有 条目的用户。 SQL Fiddle示例 问题答案: 您可以使用外部联接: 或者(如果您对EMPLOYEE或STUDENT表中的数据不感兴趣)

  • 问题内容: 我有以下数据集。 https://drive.google.com/drive/folders/1NRelNsXQJ7MTNKcm-T69N6r5ZsOyFmTS?usp=sharing 如果列名称与工作表名称相同,则将所有内容合并在一起作为单独的列,以下是代码 运行以上代码后的数据 merged_data 如何合并条件文件? 健康)状况。 以上代码段中的价格1指向带有名称为int 7