我可以在R中的多个列上运行循环吗?

我可以在R中的多个列上运行循环吗?,r,function,loops,for-loop,transform,R,Function,Loops,For Loop,Transform,因此,我想通过将“0”替换为“0”、“1”替换为“1”以及将“2”替换为“2”来替换我列中的值。 发件人: V1 V2 V3 二 二 一 零 二 一 一 一 一 我们可以将mutate与交叉使用 library(dplyr) df %>% mutate(across(everything(), ~ as.integer(as.character(factor(., levels = c("Zero", "One", &q

因此,我想通过将“0”替换为“0”、“1”替换为“1”以及将“2”替换为“2”来替换我列中的值。 发件人:

V1 V2 V3 二 二 一 零 二 一 一 一 一
我们可以将
mutate
交叉使用

library(dplyr)
df %>%
  mutate(across(everything(), ~ as.integer(as.character(factor(., 
            levels = c("Zero", "One", "Two"),
                                    labels = c(0, 1, 2))))))
-输出

#   V1 V2 V3
#1  2  2  1
#2  0  2  1
#3  1  1  1

或者,这可以在
base R
中的一行中完成。此外,还可以扩展到更多级别,而无需编写新的代码行

df[] <- lapply(df, function(x) setNames(c(0, 1, 2), c("Zero", "One", "Two"))[x])

df[]如果只有三个数字,则可以使用索引并最终格式化为数值:

#Code
df[df=='Zero']<-0
df[df=='One']<-1
df[df=='Two']<-2
df <- as.data.frame(sapply(df, as.numeric))

使用
setNames

df[] <- setNames(0:2, c("Zero", "One", "Two"))[unlist(df)]
  V1 V2 V3
1  2  2  1
2  0  2  1
3  1  1  1
df[] <- setNames(0:2, c("Zero", "One", "Two"))[unlist(df)]
> df
  V1 V2 V3
1  2  2  1
2  0  2  1
3  1  1  1