我有一个数据框如下。每个Status
的{{1}}记录在不同的时间点。 0表示此人活着,1表示死亡。
ID
我想要对列ID Status
1 0
1 0
1 1
2 0
2 0
2 0
3 0
3 0
3 0
3 1
进行随机播放,每个ID的状态为1,只有一次。之后,我希望其他行有Status
。例如,我希望我的数据框在改组后看起来如下所示:
NA
答案 0 :(得分:3)
根据您发布的数据和示例输出,您似乎想要随机抽样df$Status
,然后进行替换。只需一步即可获得所需内容:
set.seed(3)
df$Status <- ave(sample(df$Status), df$ID, FUN = function(x) replace(x, which(cumsum(x)>=1)[-1], NA))
df
# ID Status
#1 1 0
#2 1 0
#3 1 0
#4 2 1
#5 2 NA
#6 2 NA
#7 3 0
#8 3 0
#9 3 1
#10 3 NA
答案 1 :(得分:2)
使用<input type="button" class="btn_sq" value="1" id="w1"/>
<input type="button" class="btn_sq" value="2" id="w2"/>
<input type="button" class="btn_sq" value="3" id="w3"/>
<input type="button" class="btn_sq" value="4" id="w4"/>
<input type="button" class="btn_sq" value="5" id="w5"/>
<input type="button" class="btn_sq" value="6" id="w6"/><br>
<input type="button" class="btn_sq" value="7" id="w7"/>
<input type="button" class="btn_sq" value="8" id="w7"/>
<input type="button" class="btn_sq" value="9" id="w9"/>
<input type="button" class="btn_sq" value="10" id="w10"/>
<input type="button" class="btn_sq" value="11" id="w11"/>
<input type="button" class="btn_sq" value="12" id="w12"/><br>
<input type="button" class="btn_sq" value="13" id="w13" />
<input type="button" class="btn_sq" value="14" id="w14" />
<input type="button" class="btn_sq" value="15" id="w15" />
<input type="button" class="btn_sq" value="16" id="w16" />
<input type="button" class="btn_sq" value="17" id="w17" />
<input type="button" class="btn_sq" value="18" id="w18" /><br>
<input type="button" class="btn_sq" value="19" id="w19" />
<input type="button" class="btn_sq" value="20" id="w20" />
<input type="button" class="btn_sq" value="21" id="w21" />
<input type="button" class="btn_sq" value="22" id="w22" />
<input type="button" class="btn_sq" value="23" id="w23" />
<input type="button" class="btn_sq" value="24" id="w24" />
cumsum
来决定cumsum
出现的第一个1
的一个选项。
请注意,我修改了OP的示例数据帧,以表示重新洗牌的逻辑。
ID
数据强>
library(dplyr)
df %>% group_by(ID) %>%
mutate(Sum = cumsum(cumsum(Status))) %>%
mutate(Status = ifelse(Sum > 1, NA, Status)) %>%
select(-Sum)
# # A tibble: 10 x 2
# # Groups: ID [3]
# ID Status
# <int> <int>
# 1 1 0
# 2 1 0
# 3 1 1
# 4 2 0
# 5 2 1
# 6 2 NA
# 7 3 0
# 8 3 1
# 9 3 NA
# 10 3 NA