r - 有条件地将因子变量 1 的水平替换为特定变量 2

标签 r dplyr forcats

在我的例子中:

# Packages
library(dplyr)

# My dataset
FARM <- c(rep("LIBERTY2",4),rep("OLDOAK",4))
AGE <- c(8,9,10,10,8,9,10,10)
Y = c(0,0,0,0,1,1,1,1)
DS_F <- data.frame(FARM=FARM,AGE=AGE,Y=Y)
str(DS_F)
# 'data.frame': 8 obs. of  3 variables:
#  $ FARM: chr  "LIBERTY2" "LIBERTY2" "LIBERTY2" "LIBERTY2" ...
#  $ AGE : num  8 9 10 10 8 9 10 10
#  $ Y   : num  0 0 0 0 1 1 1 1

我希望仅对变量 FARM 中的 LIBERTY2 因子进行条件变异,并在另一个变量中使用该规则:如果 AGE 是等于 10 比 3,如果 AGE 等于 9 比 2,如果 AGE 等于 8 比 1。

My final output should be:
DS_F2
#       FARM AGE Y
# 1 LIBERTY2   1 0
# 2 LIBERTY2   2 0
# 3 LIBERTY2   3 0
# 4 LIBERTY2   3 0
# 5   OLDOAK   8 1
# 6   OLDOAK   9 1
# 7   OLDOAK  10 1
# 8   OLDOAK  10 1

请帮助我。

最佳答案

您可以将 recode() 包含在 if_else() 中。

library(dplyr)

DS_F %>%
  mutate(AGE.2 = if_else(FARM == "LIBERTY2",
                         recode(AGE, `10` = 3, `9` = 2, `8` = 1),
                         AGE))

#       FARM AGE Y AGE.2
# 1 LIBERTY2   8 0     1
# 2 LIBERTY2   9 0     2
# 3 LIBERTY2  10 0     3
# 4 LIBERTY2  10 0     3
# 5   OLDOAK   8 1     8
# 6   OLDOAK   9 1     9
# 7   OLDOAK  10 1    10
# 8   OLDOAK  10 1    10

关于r - 有条件地将因子变量 1 的水平替换为特定变量 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75059039/

相关文章:

r - (选择所有适用项)R 数据框中的调查答案

R - 如何按条件和按列操作数据

r - 改变应用类型转换的所有列

按名称引用 `data.table` 列

r - 对满足两个条件的变量使用 mutate_at dplyr R

r - 同时修剪多个变量的因子标签

r - 如何使用 fct_relevel 函数重新调整因子列?

r - 仅从分组/排序数据中选择前 n 个值

R函数打印并分配返回列表的第一个元素,然后可以使用管道

根据另一个因素对facet_wrap/facet_grid中的面板进行重新排序,并多次出现