我想从另一个变量替换某个变量的某些值(例如,十分之三)。选择内容必须是随机的,并且必须保持相同的ID。
这是一个示例数据,
C_ID Loan_ID Loan R1 Coll_ID Collateral R2 maxRank
A c 341 1 p1 506 1 3
A c 341 1 p2 366 2 3
A c 341 1 p3 263 3 3
A a 689 2 p1 506 1 3
A a 689 2 p2 366 2 3
A a 689 2 p3 263 3 3
A d 720 3 p1 506 1 3
A d 720 3 p2 366 2 3
A d 720 3 p3 263 3 3
A b 334 4 p1 506 1 3
A b 334 4 p2 366 2 3
A b 334 4 p3 263 3 3
A e 752 5 p1 506 1 3
A e 752 5 p2 366 2 3
A e 752 5 p3 263 3 3
B h 193 1 p5 529 1 2
B h 193 1 p4 414 2 2
B g 494 2 p5 529 1 2
B g 494 2 p4 414 2 2
B f 227 3 p5 529 1 2
B f 227 3 p4 414 2 2
B j 785 4 p5 529 1 2
B j 785 4 p4 414 2 2
B i 371 5 p5 529 1 2
B i 371 5 p4 414 2 2
B k 395 6 p5 529 1 2
B k 395 6 p4 414 2 2
现在让我们说我想用相同id下的变量b中的值替换变量a中的3个值。一个示例输出可能是
id <- c(seq(1:10))
a <- c(11, 22, 33, 44, 55, 66, 77, 88, 99, 109)
b <- c(111, 222, 333, 444, 555, 666, 777, 888, 999, 1099)
data <- data.frame(id, a, b)
data
> data
id a b
1 1 11 111
2 2 22 222
3 3 33 333
4 4 44 444
5 5 55 555
6 6 66 666
7 7 77 777
8 8 88 888
9 9 99 999
10 10 109 1099
任何人都可以帮助我做到这一点吗?整洁或data.table两种解决方案都很好。
答案 0 :(得分:2)
这是一个创建行索引('i1')的sample
的选项,用于在base R
中将'b'的值分配给'a'
i1 <- sample(seq_len(nrow(data)), 3, replace = FALSE)
data$a[i1] <- data$b[i1]
或者使用dplyr
,使用row_number()
创建一个条件,并在case_when
(ifelse
或if_else
或replace
)中使用该条件进行更改从“ a”到“ b”的值
library(dplyr)
data %>%
mutate(a = case_when(row_number() %in%
sample(id, 3, replace = FALSE) ~ b, TRUE ~ a))
或者使用data.table
,将'data.frame'转换为'data.table'(setDT
),用数字索引指定i
,然后进行赋值({{ 1}})在:=
j