簡體   English   中英

有條件地替換特定變量 2 的因子變量 1 的水平

[英]Conditionally replace levels of factor variable 1 for a specific variable 2

在我的例子中:

# 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

使用data.table

library(data.table)
setDT(DS_F)[FARM == "LIBERTY2", AGE := AGE - min(AGE)+1]

-輸出

> DS_F
       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

這是你想要的?

DS_F <- DS_F %>%
  mutate(FARM = as.factor(FARM),
         RULE = case_when(AGE == 10 ~ 3, 
                          AGE == 9 ~ 2,
                          AGE == 8 ~ 1))

產生

> DS_F %>%
+   mutate(FARM = as.factor(FARM),
+          RULE = case_when(AGE == 10 ~ 3, 
+                           AGE == 9 ~ 2,
+                           AGE == 8 ~ 1))
      FARM AGE Y RULE
1 LIBERTY2   8 0    1
2 LIBERTY2   9 0    2
3 LIBERTY2  10 0    3
4 LIBERTY2  10 0    3
5   OLDOAK   8 1    1
6   OLDOAK   9 1    2
7   OLDOAK  10 1    3
8   OLDOAK  10 1    3

具有以下數據類型

> str(DS_F)
'data.frame':   8 obs. of  4 variables:
 $ FARM: Factor w/ 2 levels "LIBERTY2","OLDOAK": 1 1 1 1 2 2 2 2
 $ AGE : num  8 9 10 10 8 9 10 10
 $ Y   : num  0 0 0 0 1 1 1 1
 $ RULE: num  1 2 3 3 1 2 3 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM