gpt4 book ai didi

替换丢失顺序的 data.frame 中的值

转载 作者:行者123 更新时间:2023-12-02 16:04:53 25 4
gpt4 key购买 nike

在我的玩具 data 中,对于每个独特的 studynumeric 变量(sample group) 的顺序必须从 1 开始。但是:

例如,在study 1中,我们看到有两个独特的sample值(1 & 3), 所以 3 必须替换为 2.

例如,在study 2中,我们看到有一个唯一的group值(2),所以它必须替换为1

study 3 中,samplegroup 看起来都不错,这意味着它们的唯一值是 12(无需替换)。

对于这个玩具数据,我的期望输出如下所示。但我很欣赏一个功能性解决方案,它可以自动替换 data.frame 中任意数量的 numeric 变量,这些变量已经丢失了它们的顺序,就像我在我的玩具 data 中展示的那样。

m="
study sample group outcome
1 1 1 A
1 1 1 B
1 1 2 A
1 1 2 B
1 3 1 A
1 3 1 B
1 3 2 A
1 3 2 B

2 1 2 A
2 1 2 B
2 2 2 A
2 2 2 B
2 3 2 A
2 3 2 B

3 1 1 A
3 1 1 B
3 1 2 A
3 1 2 B
3 2 1 A
3 2 1 B
3 2 2 A
3 2 2 B"

data <- read.table(text=m, h=T)

Desired_output="
study sample group outcome
1 1 1 A
1 1 1 B
1 1 2 A
1 1 2 B
1 2 1 A
1 2 1 B
1 2 2 A
1 2 2 B

2 1 1 A
2 1 1 B
2 2 1 A
2 2 1 B
2 3 1 A
2 3 1 B

3 1 1 A
3 1 1 B
3 1 2 A
3 1 2 B
3 2 1 A
3 2 1 B
3 2 2 A
3 2 2 B"

最佳答案

你可以这样做:

library(dplyr)

data %>%
group_by(study) %>%
mutate(across(tidyselect::vars_select_helpers$where(is.numeric),
function(x) as.numeric(as.factor(x)))) %>%
as.data.frame()

生成的数据框如下所示:

   study sample group outcome
1 1 1 1 A
2 1 1 1 B
3 1 1 2 A
4 1 1 2 B
5 1 2 1 A
6 1 2 1 B
7 1 2 2 A
8 1 2 2 B
9 2 1 1 A
10 2 1 1 B
11 2 2 1 A
12 2 2 1 B
13 2 3 1 A
14 2 3 1 B
15 3 1 1 A
16 3 1 1 B
17 3 1 2 A
18 3 1 2 B
19 3 2 1 A
20 3 2 1 B
21 3 2 2 A
22 3 2 2 B

关于替换丢失顺序的 data.frame 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69727404/

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