我不知道在R中是否有一种简单的方法可以做到这一点。我有3列(孩子,父亲,母亲)约5000行。我试图在父亲的列中指定零(0)到25%,50%和75%,即假设特定比例是未知的(0)。我希望它根据每个父亲的子行数根据每个父亲的子行数进行分配。在下面的数据中,我希望脚本替换为例如25%的g,k,u和x与0.谢谢
child father mother
1 g m1
2 g m2
3 g m1
4 g m2
5 g m1
6 g m2
7 k m1
8 k m2
9 k m1
10 k m2
11 u m1
12 u m2
13 u m1
14 u m2
15 u m1
16 x m2
17 x m1
18 x m2
19 x m1
20 x m2
答案 0 :(得分:1)
这将在father
的每个组中查看并返回一个向量,其中25%的案例设置为0.将此值保存在当前变量的顶部将有望为您提供所需的内容:
test <- read.table(textConnection("child father mother
1 g m1
2 g m2
3 g m1
4 g m2
5 g m1
6 g m2
7 k m1
8 k m2
9 k m1
10 k m2
11 u m1
12 u m2
13 u m1
14 u m2
15 u m1
16 x m2
17 x m1
18 x m2
19 x m1
20 x m2"),
header=TRUE,stringsAsFactors=FALSE)
我将25%下调为保守。如果合适,floor
可以替换为round
或ceil
。
test$father <- unlist(
ave(test$father,test$father,
FUN=function(x) {
x[1:floor(length(x)*0.25)] <- 0
x
}
)
)
结果:
test
> test
child father mother
1 1 0 m1
2 2 g m2
3 3 g m1
4 4 g m2
5 5 g m1
6 6 g m2
7 7 0 m1
8 8 k m2
9 9 k m1
10 10 k m2
11 11 0 m1
12 12 u m2
13 13 u m1
14 14 u m2
15 15 u m1
16 16 0 m2
17 17 x m1
18 18 x m2
19 19 x m1
20 20 x m2