首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据另一列中的值在data.table中存储多列

根据另一列中的值在data.table中存储多列
EN

Stack Overflow用户
提问于 2022-02-28 12:25:08
回答 1查看 74关注 0票数 0

我有一个data.table,它有N=3列。为了简单起见,让我们假设第一列是期望值,随后的列是每个示例中该特定值的观测值。

data.table示例

代码语言:javascript
运行
复制
experiment obs_s1 obs_s2
1 1 1
2 2 2
3 3 3
4 2 2
5 2 4
6 4 4
7 5 4
8 4 4
9 3 3
10 4 4

挑战是将实验放入任意的区间,并将特定的函数应用于样本的观测。让我们假设,在自定义范围内找到所有观察值的最大值和和。

因为为了制作一个新的data.table,代码看起来很复杂,所以我首先使用了melt.data.table

代码语言:javascript
运行
复制
experiment sample count
1   obs_s1  1
2   obs_s1  2
3   obs_s1  3
4   obs_s1  2
5   obs_s1  2
6   obs_s1  4
7   obs_s1  5
8   obs_s1  4
9   obs_s1  3
10  obs_s1  4
1   obs_s2  1
2   obs_s2  2
3   obs_s2  3
4   obs_s2  2
5   obs_s2  4
6   obs_s2  4
7   obs_s2  4
8   obs_s2  4
9   obs_s2  3
10  obs_s2  4

并尝试使用cut,但这只适用于一个列,即count,但我不能真正使用lapply或类似于输出的函数。示例:

代码语言:javascript
运行
复制
experiment = c(0,4,8,10)
labels = c('bin_1', 'bin_2', 'bin_3')
my_dt_melt <- my_dt_melt[, bins":= cut(insert_size, breaks = insert_size_intervals, labels = labels)]

我现在所做的只是使用for循环,提取值并创建一个新的data.table,但是它没有利用data.table的强大功能

我想从这个熔化的data.table中实现以下输出:

  1. 最大值输出示例:

代码语言:javascript
运行
复制
range sample value
1-4 obs_s1 3
1-4 obs_s2 3
5-8 obs_s1 5
5-8 obs_s2 4
9-10 obs_s1 4
9-10 obs_s2 4

  1. 示例输出的值之和:

代码语言:javascript
运行
复制
range sample value
1-4 obs_s1 8
1-4 obs_s2 8
5-8 obs_s1 15
5-8 obs_s2 16
9-10 obs_s1 7
9-10 obs_s2 7

因此,问题是:如何将一列放入融化的data.table w.r.t到第一列,并在其上应用函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-28 14:22:20

您可以将函数/表达式放在by参数中:

代码语言:javascript
运行
复制
my_dt_melt[, list(maxcount = max(count), sumcount = sum(count)),
   by = .(
     range = cut(
       experiment,
       c(0,4,8,10),
       labels = c('bin_1', 'bin_2', 'bin_3')),
     sample
)]
#      range sample maxcount sumcount
# 1:   bin_1 obs_s1        3        8
# 2:   bin_2 obs_s1        5       15
# 3:   bin_3 obs_s1        4        7
# 4:   bin_1 obs_s2        3        8
# 5:   bin_2 obs_s2        4       16
# 6:   bin_3 obs_s2        4        7
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71295012

复制
相关文章

相似问题

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