在R数据帧中用NA随机替换每组值的百分比 [英] randomly replacing percentage of values per group with NA in R dataframe

查看:0
本文介绍了在R数据帧中用NA随机替换每组值的百分比的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个具有不同大小的不同组(ID)的数据帧。在每个组中,我想用NA来随机替换&Quot;Value&Quot;列中特定百分比的值(比方说30%)。以下是我的数据的简化版本:

ID<-rep(c("X1","X2"),times=c(3,6))
value<-c(1,2,3,1,2,3,4,5,6)
df1 <- data.frame(ID,value)
df1
ID value
X1     1
X1     2
X1     3
X2     1
X2     2
X2     3
X2     4
X2     5
X2     6

这是我想要的:

ID value
X1     1
X1     NA
X1     3
X2     1
X2     2
X2     NA
X2     4
X2     5
X2     NA

你知道我该怎么做吗?我更喜欢使用tidyVerse,但如果您有其他选择,也将不胜感激!

推荐答案

我们可以使用dplyr。按‘ID’分组,使用sample获取索引或30%的行,并在replace中使用该索引将‘Value’替换为NA

library(dplyr)
df1 %>%
    group_by(ID) %>%
    mutate(value =  replace(value, sample(row_number(),  
           size = ceiling(0.3 * n()), replace = FALSE), NA) )
# A tibble: 9 x 2
# Groups:   ID [2]
#  ID    value
#  <chr> <dbl>
#1 X1       NA
#2 X1        2
#3 X1        3
#4 X2       NA
#5 X2        2
#6 X2       NA
#7 X2        4
#8 X2        5
#9 X2        6

这篇关于在R数据帧中用NA随机替换每组值的百分比的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆