r - 在R中的数据框中进行列洗牌后删除不必要的行

标签 r rowdeleting

我有一个数据框如下。每个ID在不同时间点记录的Status。 0 表示该人还活着,1 表示该人已死亡。

ID   Status
1    0
1    0
1    1
2    0
2    0
2    0
3    0
3    0
3    0
3    1

我想打乱Status列,并且每个ID的状态可以为1,仅一次。之后,我希望其他行有 NA 。例如,我希望我的数据框在改组后如下所示:

ID   Status
1    0
1    0
1    0
2    0
2    1
2    NA
3    0
3    1
3    NA
3    NA

最佳答案

从您发布的数据和示例输出来看,您似乎想要随机采样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

关于r - 在R中的数据框中进行列洗牌后删除不必要的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49544325/

相关文章:

python - 在 for 循环内删除 np 数组中的行

r - 在 R 中按多个其他列分组后求列的平均值

r - 合并具有不同行号的文件

r - 拟合闭合曲线,然后从该曲线绘制等距点

r - 在 xyplot 中用误差线绘制 SE

r - 将字符添加到数据框列中每个元素的末尾

sas - 如何删除 SAS 数据文件的前 10 行和后 10 行?