特定观察结果的随机抽样

问题描述 投票:0回答:1

我目前正在做一个项目。项目包含一个具有 V1、V2、V3 和 V4 的数据帧。 V1和V2是唯一的ID。 V3和V4代表疾病状态。

df

V1   V2   V3 V4
101 201 1 1
102 202 1 1 
103 203 2 NA
104 204 1 2
105 205 1 1
106 206 1 1
107 207 2 NA
108 208 1 1
109 209 2 1
110 210 2 2
111 211  2 NA
112 212  NA 2
113 213  1 1
114 214  1 1
115 215  2 NA

这里,V3和V4包含多个场景1和1,2和NA,NA和2等。我只想转换1和1场景,意味着V3和V4都有1。如果V3中是1,则应该是NA在 V4 中或反之亦然,随机。不适用于 1 和 2 或 2 和 1。但 V3 中总计 1 应该更多。我想使用 R。

最终数据框应如下所示:

V1   V2   V3 V4
101 201 1 NA
102 202 NA 1 
103 203 2 NA
104 204 1 2
105 205 1 NA
106 206 1 NA
107 207 2 NA
108 208 NA 1
109 209 2 1
110 210 2 2
111 211  2 NA
112 212  NA 2
113 213  1 NA
114 214  1 NA
115 215  2 NA


     
r
1个回答
0
投票

这是我的方法:

你说 V3 中的 1 总数应该比 V4 中的多,但你没有说多少。 我假设它是 60% - 您可以根据需要更改

prop
对象。

prop = 0.6 # 60 % of the new NAs should be in V4

# the rows with 1 and 1 in V3 and V4
both1 <- which(df$V3 == 1 & df$V4 == 1)

# rows where V4 should be set to NA
V4 <- sample(both1, round(length(both1) * prop))
# remainder are rows where V3 shoudl be set to NA
V3 <- both1[!(both1 %in% V4)]


# apply the changes to df
df[V3, "V3"] <- NA
df[V4, "V4"] <- NA
© www.soinside.com 2019 - 2024. All rights reserved.