gpt4 book ai didi

随机重新编码每行中一个值的第一个和第二个实例?

转载 作者:行者123 更新时间:2023-12-03 20:22:52 24 4
gpt4 key购买 nike

我有一个数据框,其中每行中有两个值的实例(假设值为 34)。我想用 3 替换一个实例,用 4 替换另一个实例(没有replament,所以如果第一个实例得到 4,第二个实例得到 3。反之亦然。)
我想随机分配(以便某些行使用 3 然后 4,其他行 4 然后 3。)
这是我的例子:

# sample data
df1 <- data.frame(a= c(1, 2, NA, NA),b= c(2, NA, 1, NA),c= c(NA, NA,34, 2),
d= c(NA, 34, NA,1),e= c(34, 34,2,34),f= c(34, 1, NA,NA),
g= c(NA, NA,34, NA), h= c(NA,NA, NA, 34))

> df1
a b c d e f g h
1 1 2 NA NA 34 34 NA NA
2 2 NA NA 34 34 1 NA NA
3 NA 1 34 NA 2 NA 34 NA
4 NA NA 2 1 34 NA NA 34
这是符合我的目标的输出:
   a  b  c  d e  f  g  h
1 1 2 NA NA 3 4 NA NA
2 2 NA NA 4 3 1 NA NA
3 NA 1 4 NA 2 NA 3 NA
4 NA NA 2 1 4 NA NA 3
到目前为止,在我的尝试中,我已经能够使用 which() 识别包含 34 的列。与 apply()
indexes_34 <- apply(df1, 1,  function(x) {which(x == 34)})
我随机生成了一个向量列表,其元素包含 3 和 4 或 4 和 3。
ord <- list()
for(i in 1:nrow(df1)){
ord[[i]] <- sample(c(3,4), 2)
}
但是我在编写将每个“ord”向量中的值分配给正确索引处的“df1”的每一行的代码时遇到了麻烦。
有没有直接的方法来做到这一点?

最佳答案

dplyrpurrr选项可以是:

df1 %>%
mutate(pmap_dfr(across(everything()),
~ `[<-`(c(...), which(c(...) == 34), sample(c(3, 4)))))

a b c d e f g h
1 1 2 NA NA 4 3 NA NA
2 2 NA NA 4 3 1 NA NA
3 NA 1 4 NA 2 NA 3 NA
4 NA NA 2 1 4 NA NA 3

关于随机重新编码每行中一个值的第一个和第二个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67587900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com