gpt4 book ai didi

同时替换 df 的一列中的值

转载 作者:行者123 更新时间:2023-12-04 01:07:36 26 4
gpt4 key购买 nike

我有一个非常简单的问题。我有一个大数据框。我需要按照此架构替换第 2 列(集群)中的值:

1 -> 3
2 -> 5
3 -> 1
5 -> 2

> dput(head(df))
structure(list(Target = c("TRINITY_GG_100011_c0_g1_i3.mrna1",
"TRINITY_GG_100011_c0_g1_i5.mrna1", "TRINITY_GG_100011_c0_g1_i6.mrna1",
"TRINITY_GG_100011_c0_g1_i9.mrna1", "TRINITY_GG_100016_c0_g1_i1.mrna1",
"TRINITY_GG_100016_c0_g1_i2.mrna1"), cluster = c(2L, 5L, 5L,
3L, 4L, 5L), AAA = c(9L, 7L, 8L, 7L,
5L, 5L)), row.names = c(NA, 6L), class = "data.frame")

#normally I will do it like this:
df$cluster[df$cluster == 1] <- 3

问题是,一旦我将 1 换成 3,下次我必须将 3 换成 1 时,它会再次改变。所以我不能按顺序处理这个问题。我需要一些可以使用原始号码并一次性更改所有号码的东西。

最佳答案

我们可以使用命名向量并替换

library(dplyr)
df %>%
mutate(cluster = coalesce(setNames(c(3, 5, 1, 2),
c(1, 2, 3, 5))[as.character(cluster)], cluster))

-输出

#                            Target cluster AAA
#1 TRINITY_GG_100011_c0_g1_i3.mrna1 5 9
#2 TRINITY_GG_100011_c0_g1_i5.mrna1 2 7
#3 TRINITY_GG_100011_c0_g1_i6.mrna1 2 8
#4 TRINITY_GG_100011_c0_g1_i9.mrna1 1 7
#5 TRINITY_GG_100016_c0_g1_i1.mrna1 4 5
#6 TRINITY_GG_100016_c0_g1_i2.mrna1 2 5

缺点之一是它将为不在命名向量中的元素返回 NA。为了在返回 NA 的任何地方返回原始向量值,用 coalesce 包装,这样如果更新列中有 NA,返回旧向量的对应值


或者可以使用键/值数据集进行连接

library(data.table)
setDT(df)[data.frame(cluster = c(1, 2, 3, 5), new = c(3, 5, 1, 2)),
cluster := new, on = .(cluster)]

关于同时替换 df 的一列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65946036/

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