我有一个看起来像这样的表,其中两个相同的列中有多个值,必须在一列中替换这些值,如下所示:
之前
列_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'")
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