高效替换列中的多个值

问题描述 投票:0回答:1

我有一个看起来像这样的表,其中两个相同的列中有多个值,必须在一列中替换这些值,如下所示:

之前

列_A 专栏_B
默认1 默认1
默认2 默认2
默认3 默认3
默认4 默认4
默认5 默认5
默认6 默认6

之后

列_A 专栏_B
默认1 Q10
默认2 Q10
默认3 Q10
默认4 B12
默认5 B12
默认6 B12

我的问题是该表有 135 行长,我不想使用这个:

Data.dat$Column_B[Data.dat$Column_B == "default55"] <- "Q10"

一百万次。

实现这个目标最有效的方法是什么?

我尝试过单独的替换功能,效果很好......但效率不高。

我还尝试了 sapply 函数(在此视频中),但两列中的所有值都被替换。

如果我不必只替换一列,那么 sapply 函数就完美了!

我尝试过重新编码,但得到一个

operator is invalid for atomic vectors error
,我似乎无法解决。

以下重新编码示例:

Data.dat$Column_B<-recode(Data.dat$Column_B, "c('default1','default2','default3','default4','default5','default6','default7')='Q10'")

r sapply
1个回答
0
投票

case_match
dplyr
怎么样?

数据示例:

df <- data.frame(
  Column_A = c("Default1", "Default2", "Default3", "Default4", "Default5", "Default6"),
  Column_B = c("Default 1", "Default 2", "Default 3", "Default 4", "Default 5", "Default 6")
)

用例_匹配

library(dplyr)
df_new <- df %>%
  mutate(Column_B = case_match(
    Column_B,
    c("Default 1", "Default 2", "Default 3") ~ "Q10",
    c("Default 4", "Default 5", "Default 6") ~ "B12"
  ))

df_new
> df_new
  Column_A Column_B
1 Default1      Q10
2 Default2      Q10
3 Default3      Q10
4 Default4      B12
5 Default5      B12
6 Default6      B12
© www.soinside.com 2019 - 2024. All rights reserved.