You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

针对FARM变量的LIBERTY2类别,条件替换AGE变量的取值

R数据处理请求

原始代码与数据集

# 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

OLDOAK类别的AGE值保持不变。

预期输出

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

解决方案

可以使用dplyr的mutate()结合case_when()函数实现条件修改:

library(dplyr)

DS_F2 <- DS_F %>%
  mutate(AGE = case_when(
    FARM == "LIBERTY2" & AGE == 8 ~ 1,
    FARM == "LIBERTY2" & AGE == 9 ~ 2,
    FARM == "LIBERTY2" & AGE == 10 ~ 3,
    TRUE ~ AGE  # 其他情况保持原值
  ))

# 查看结果
DS_F2

或者利用AGE与目标值的固定差值(8-7=1,9-7=2,10-7=3),简化代码:

DS_F2 <- DS_F %>%
  mutate(AGE = ifelse(FARM == "LIBERTY2", AGE - 7, AGE))

两种方式均可得到预期输出。

内容的提问来源于stack exchange,提问作者Leprechault

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:55:37