用R中的另一个值替换每组的特定比例

用R中的另一个值替换每组的特定比例,r,R,请告诉我,我不知道在R中是否有一种简单的方法可以做到这一点。我有3列(儿童、父亲、母亲),大约5000行。我试图在父亲栏中为25%、50%和75%分配零(0),即假设特定比例未知(0)。我希望它根据每个父亲的行数,基于每个父亲的孩子总数来分配。在下面的数据中,我希望脚本将g、k、u和x的25%替换为0。谢谢 这将在每个father组中查找,并返回一个向量,其中25%的案例设置为0。将其保存在当前变量的顶部有望为您提供所需的: test <- read.table(textConnecti

请告诉我,我不知道在R中是否有一种简单的方法可以做到这一点。我有3列(儿童、父亲、母亲),大约5000行。我试图在父亲栏中为25%、50%和75%分配零(0),即假设特定比例未知(0)。我希望它根据每个父亲的行数,基于每个父亲的孩子总数来分配。在下面的数据中,我希望脚本将g、k、u和x的25%替换为0。谢谢



这将在每个
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)
结果是:

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

csv文件的行为很有趣,它会重新洗牌父列。我不知道这是为什么happening@nolyugo-这是一个排序问题,因为
taply
将以升序返回
father
的组-我已通过使用
ave
进行编辑来解决此问题。
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