dplyr:将抖动添加到组中的重复值

fanli

我有一些value按(Tissue分组的数字数据()。我想为每个组中多次出现的值添加一个小的抖动。

输入:

df <- structure(list(value = c(1.05155243861439, 
1.05155243861439, 1.05155243861439, 11.9769249796958, 1.05155243861439, 
1.05155243861439, 1.05155243861439, 1.05155243861439, 1.05155243861439
), Tissue = structure(c(5L, 5L, 5L, 4L, 5L, 3L, 5L, 1L, 1L
), .Label = c("Brain", "Marrow", "Spleen", "Testes", "Vis"), class = "factor")), .Names = c("value", 
"Tissue"), row.names = c("SM-2", "SM-3", "SM-4", "SM-5", 
"SM-6", "SM-7", "SM-8", "SM-9", "SM-10"), class = "data.frame")

我尝试使用group_bymutate,但这会为每个组的每个重复元素添加相同的抖动(有点毫无意义,对吧?)。

df <- df %>%
    group_by(Tissue, value) %>%
    mutate(jitter = ifelse(n()>1, value+runif(1, min=-0.15, max=0.15), value))

输出:

Source: local data frame [9 x 3]
Groups: Tissue, value [4]

      value Tissue     jitter
      (dbl) (fctr)      (dbl)
1  1.051552    Vis  1.1793382
2  1.051552    Vis  1.1793382
3  1.051552    Vis  1.1793382
4 11.976925 Testes 11.9769250
5  1.051552    Vis  1.1793382
6  1.051552 Spleen  1.0515524
7  1.051552    Vis  1.1793382
8  1.051552  Brain  0.9284923
9  1.051552  Brain  0.9284923

第四行和第六行正确无抖动。但是[1-3,5,7]我希望具有独特的抖动。人们有什么更好的主意dplyr吗?:(

格雷戈尔·托马斯(Gregor Thomas)

正如评论中指出的那样,ifelse()在这种情况下是有问题的,因为它返回的长度必须与测试的长度相同。由于您的测试长度为1,ifelse因此不会返回length的随机数n()

我们可以通过将抖动值乘以是否为逻辑来解决此问题n() > 1如果为false,则将乘以0;否则为0。如果是,则加1。

df %>%
    group_by(Tissue, value) %>%
    mutate(
        jitter = value + runif(n(), min = -0.15, max = 0.15) * (n() > 1)
    )
#       value Tissue     jitter
#       (dbl) (fctr)      (dbl)
# 1  1.051552    Vis  1.1020925
# 2  1.051552    Vis  1.1398244
# 3  1.051552    Vis  0.9339355
# 4 11.976925 Testes 11.9769250
# 5  1.051552    Vis  1.1186657
# 6  1.051552 Spleen  1.0515524
# 7  1.051552    Vis  1.0249348
# 8  1.051552  Brain  1.0814222
# 9  1.051552  Brain  1.0496148

使用一个条件,您实际上可以使用plain if(){} else,这也可以在内部使用mutate

jitter = value + if(n() > 1) {runif(n(), -.15, .15)} else 0

您更喜欢哪个,取决于您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用dplyr将抖动添加到列值

来自分类Dev

如何将重复的值添加到ArrayList中?

来自分类Dev

如何将重复的值添加到ArrayList中?

来自分类Dev

将重复的值添加到BindingList

来自分类Dev

将组索引值添加到组

来自分类Dev

使用dplyr将一组中缺少的级别添加到汇总表

来自分类Dev

如何将重复键的值添加到键中:[值数组] 在 Perl 中

来自分类Dev

将列表中重复项的值添加到字典中

来自分类Dev

如何将值添加到数组中的重复键中

来自分类Dev

仅将非重复值添加到PostgreSQL表

来自分类Dev

将重复值的键添加到列表python

来自分类Dev

Python - 将元组值添加到字典中的重复键

来自分类Dev

将一组对象添加到 reducer 中

来自分类Dev

将行添加到 Pandas DataFrame 中的组

来自分类Dev

添加到集合中的值会重复多次

来自分类Dev

在PHP中将重复值添加到数组中

来自分类Dev

使用dplyr将行添加到分组数据中?

来自分类Dev

将框阴影添加到TextInputField抖动

来自分类Dev

将索引添加到Pandas系列中的重复项

来自分类Dev

无法阻止将重复项添加到阵列中

来自分类Dev

重复的对象将添加到列表中

来自分类Dev

重复将子视图添加到UITableViewCell中

来自分类Dev

根据dplyr中多个数据框中的值将列添加到数据框中

来自分类Dev

将值添加到默认dict值列表中

来自分类Dev

将点击的值添加到储值查询中

来自分类Dev

将数组中的数组值添加到数组值

来自分类Dev

dplyr:将组聚合直接添加到长数据框

来自分类Dev

ThreeJS。将节点添加到组

来自分类Dev

将组添加到代理用户