针对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
相关产品推荐
相关产品推荐

