在R中的数据帧中的列混洗之后删除不必要的行

时间:2018-03-28 21:16:49

标签: r rowdeleting

我有一个数据框如下。每个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

2 个答案:

答案 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