我可以在R中的多个列上运行循环吗?
因此,我想通过将“0”替换为“0”、“1”替换为“1”以及将“2”替换为“2”来替换我列中的值。 发件人: V1 V2 V3 二 二 一 零 二 一 一 一 一我可以在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
我们可以将
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