【发布时间】:2021-12-04 14:57:19
【问题描述】:
我有一个大约 15 列的数据框。 A_1 A_2 B_1 B_2 C_1 C_2 ... 我正在尝试比较 A 列和 B 列,在比较 A 和 B 的列中获取最大值,以及具有最高值的列的名称,然后使用它来获取值和名称从其他列。但是,如果 A_1 和 A_2 相等,我希望它改为比较 B_1 和 B_2 并选择最高值,并基于从 C_1/C_2 D_1/D_2 等中选择的值。所以程序上:
- 获取 A_1 与 A_2 的最大值
- 获取 A_1 与 A_2 的最大列的名称
- 如果 A_2 是最大值,则获取 B_2、C_2 等的名称和值
- 如果 A_1 = A_2,则改为比较 B_1 和 B_2,然后获取 C_1/C_2 等的名称和值。
我已经到了代码中的第 3 步,但如果没有这个给出预期输出的非常丑陋的解决方案,我似乎无法弄清楚如何跳转到第 4 步。复制下面的例子:
dat <- read.table(text = "ID A_1 A_2 B_1 B_2
11 1 2 3 4
32 5 6 7 8
73 15 12 10 11
84 13 13 15 16
65 2 1 2 5
", header = TRUE)
j1 <- max.col(dat[c("A_1","A_2")], "first")
dat$max_A_name <- names(dat[c("A_1","A_2")])[j1]
k1 <- max.col(dat[c("B_1","B_2")], "first")
dat$max_B_name <- names(dat[c("B_1","B_2")])[k1]
dat <- dat %>%
mutate(max_A_val=ifelse(max_A_name=="A_1",A_1,A_2)) %>%
mutate(B_name=ifelse(max_A_name=="A_1","B_1","B_2")) %>%
mutate(B_val=ifelse(max_A_name=="A_1",B_1,B_2)) %>%
mutate(B_name=ifelse(A_1==A_2,max_B_name,B_name)) %>%
mutate(max_B_val=ifelse(max_B_name=="B_1",B_1,B_2)) %>%
mutate(B_val=ifelse(A_1==A_2,max_B_val,B_val))
dat
【问题讨论】:
-
试图解决它,非常丑陋的解决方案......但是给出了这个预期的输出,我将它添加到顶部
标签: r