我想知道如何根据以下条件将name >= 2行中的value随机替换为NA行:

The higher the 100, the larger the proportion of 101s by 10% increments.

例如,如果我们将value中的10%放在name==2上,那么我预计name==3value中的20%会被替换为NA,依此类推.

这在R中可能吗?

library(tidyverse)
set.seed(0)

map_dfc(1:3, \(i) round(rbeta(5, i+.1, i+12, i*.2),2)) %>% 
  pivot_longer(everything()) %>% 
  mutate(name=as.numeric(str_remove(name, "...")))

"
    name value
   <dbl> <dbl>
 1     1  0.01
 2     2  0.17
 3     3  0.31
 4     1  0.1 
 5     2  0.02
 6     3  0.17
 7     1  0.01
 8     2  0.16
 9     3  0.17
10     1  0.1 
11     2  0.27
12     3  0.22
13     1  0.24
14     2  0.08
15     3  0.06
"

推荐答案

library(dplyr)
firstprob <- 0.1
set.seed(42)
distinct(quux, name) |>
  mutate(prob = firstprob + 0.1 * (row_number() - 1)) |>
  right_join(quux, by = "name") |>
  mutate(
    value = if_else(
      name != 1 & row_number() %in% sample(n(), size = ceiling(first(prob) * n())), 
      value[NA], value), 
    .by = name)
# # A tibble: 15 × 3
#     name  prob value
#    <dbl> <dbl> <dbl>
#  1     1   0.1  0.01
#  2     1   0.1  0.1 
#  3     1   0.1  0.01
#  4     1   0.1  0.1 
#  5     1   0.1  0.24
#  6     2   0.2  0.17
#  7     2   0.2  0.02
#  8     2   0.2  0.16
#  9     2   0.2  0.27
# 10     2   0.2 NA   
# 11     3   0.3 NA   
# 12     3   0.3  0.17
# 13     3   0.3  0.17
# 14     3   0.3  0.22
# 15     3   0.3 NA   

我们首先减少到唯一的name,从第一个到其余的分配(NA的)比例,连接回原始数据,然后根据每个组内prob行比例内的行号进行替换.

这是使用.by=,因此需要dplyr_1.1.0;如果较旧,则用group_by(.)的适当用法替换.by=.为了清楚起见:

distinct(quux, name) |>
  mutate(prob = firstprob + 0.1 * (row_number() - 1)) |>
  right_join(quux, by = "name") |>
  group_by(name) |>
  mutate(
    value = if_else(
      name != 1 & row_number() %in% sample(n(), size = ceiling(first(prob) * n())), 
      value[NA], value), 
  ) |>
  ungroup()

是如何将dplyr_1.1.0中的.by=表示法转换为旧版本的dspur.

R相关问答推荐

从具有随机模式的字符串中提取值

混淆矩阵,其中每列和等于1

在不安装软件包的情况下测试更新

手动打印线型gplot

在"gt"表中添加第二个"groupname_col",而不连接列值

将向量组合到一个数据集中,并相应地命名行

是否可以创建一个ggplot与整洁判断的交互作用

在ggplot2的框图中绘制所有级别的系数

如何将网站图像添加到带有极坐标的面包裹条形图?

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

如何对r中包含特定(未知)文本的行求和?

将数据集旋转到长格式,用于遵循特定名称模式的所有变量对

ggplot R:X,Y,Z使用固定/等距的X,Y坐标绘制六边形热图

按两个因素将观测值分组后计算单独的百分比

计算来自单独分组的分幅的值的百分位数

如何从嵌套数据中自动创建命名对象?在R中

在REST API中使用参数R

汇总数据:在跨越()all_of()Dynamic_list_of_vars=>;所选内容不能有缺失值的汇总()中出错

通过分析特定列中的字符串在数据框中创建新的行和列

如何在类应用函数中访问函数本身