追加列值直到满足 R 中的条件
Appending column value till a condition is met in R
我有一个名为 demo 的数据框,其中包含 500 条这样的记录
ID Age
1 10
2 15
3 36
4 20
. .
. .
497 40
498 5
499 12
500 20
在上面的数据框中,我想添加具有值的列,使得总记录的 25%(在我们的例子中为 125)必须介于 1-3 和剩余之间,即 75%(从 126 开始)必须介于 4- 10,使得输出看起来像这样
ID Age colB
1 10 2
2 15 1
3 36 1
4 20 3
. .
. .
497 40 8
498 5 10
499 12 5
500 20 9
我试过了
function(x) {
a= row.names(demo)[125]
a <- FALSE
while (!a) {
demo$colB <- sample(nrow(demo), c(1:3))
}
return(x)
}
任何帮助都会很大appreciated.Thanks
我们可以尝试 rep
和 sample
demo$colB <- sample(c(rep(1:3, length.out= ceiling(nrow(demo)*.25)),
rep(4:10, length.out=ceiling(nrow(demo)*.75))))[seq_len(nrow(demo))]
sum(demo$colB %in% 1:3)
#[1] 125
根据另一个post计算sum
sum(demo$colB %in% 1:3)
#[1] 121
两者都使用 set.seed(1)
计算 sample
(使其可重现)
数据
set.seed(24)
demo <- data.frame(ID = 1:500, Age = sample(10:99, 500, replace=TRUE))
试试这个(假设您在 colB
中的值不依赖于其他列的值):
demo$colB <- sample(1:10, nrow(demo), prob = c(rep(0.25/3, 3), rep(0.75/7, 7)), replace=TRUE)
我有一个名为 demo 的数据框,其中包含 500 条这样的记录
ID Age
1 10
2 15
3 36
4 20
. .
. .
497 40
498 5
499 12
500 20
在上面的数据框中,我想添加具有值的列,使得总记录的 25%(在我们的例子中为 125)必须介于 1-3 和剩余之间,即 75%(从 126 开始)必须介于 4- 10,使得输出看起来像这样
ID Age colB
1 10 2
2 15 1
3 36 1
4 20 3
. .
. .
497 40 8
498 5 10
499 12 5
500 20 9
我试过了
function(x) {
a= row.names(demo)[125]
a <- FALSE
while (!a) {
demo$colB <- sample(nrow(demo), c(1:3))
}
return(x)
}
任何帮助都会很大appreciated.Thanks
我们可以尝试 rep
和 sample
demo$colB <- sample(c(rep(1:3, length.out= ceiling(nrow(demo)*.25)),
rep(4:10, length.out=ceiling(nrow(demo)*.75))))[seq_len(nrow(demo))]
sum(demo$colB %in% 1:3)
#[1] 125
根据另一个post计算sum
sum(demo$colB %in% 1:3)
#[1] 121
两者都使用 set.seed(1)
计算 sample
(使其可重现)
数据
set.seed(24)
demo <- data.frame(ID = 1:500, Age = sample(10:99, 500, replace=TRUE))
试试这个(假设您在 colB
中的值不依赖于其他列的值):
demo$colB <- sample(1:10, nrow(demo), prob = c(rep(0.25/3, 3), rep(0.75/7, 7)), replace=TRUE)