如何用R中的字符串替换整数值范围

问题描述 投票:0回答:1

我想根据条件用字符串字符替换整数范围。

例如,我有一个数据框

    Gender   Grade   Indus 
  1      1     610     15    
  2      1     110     29     
  3      2     210     32     
  4      1     250     20   
  5      2     420     37   
  6      2     430     19
  7      1     450     25

我想根据以下条件用一些字符串字符替换'Grade'列中的值:

prima =c(110,210:250,610)
secon =c(420,440:460)
vocat =c(430,470)

例如,如果“成绩”中的数字为prima,则为Grade == 610,我想将数字更改为单词“ Primary”。

我尝试过使用...

mydf$Grade[mydf$Grade == prima] <- "Primary"
mydf$Grade[mydf$Grade == secon] <- "Secondary"
mydf$Grade[mydf$Grade == vocat] <- "Vocational"

但是没有用。它没有返回错误,但是只有极少数的值更改为“ Primary”或“ Secondary”,而其他许多数字保持不变。

我也尝试过...

for (i in mydf$Grade) {
    if (i %in% prima) mydf$Grade <- "Primary"
    else if (i %in% secon) mydf$Grade <- "Secondary"
    else if (I %in% vocat) mydf$Grade <- "Vocational"
}

这也不起作用。 “等级”中的所有值都改为“主要”。我尝试使用这两种方法处理真实数据,但我还必须循环使用10年以上。

我不知道我做错了什么。我已经尝试过这些方法,并且当我想用NaN替代它时它可以工作。但是,当我想用​​其他整数或字符串字符替换时,它不起作用。任何建议将不胜感激。

r dataframe replace integer multiple-conditions
1个回答
0
投票

==进行逐元素比较。由于您要在此处与多个元素进行比较,因此请使用%in%

mydf$Grade[mydf$Grade %in% prima] <- "Primary"
mydf$Grade[mydf$Grade %in% secon] <- "Secondary"
mydf$Grade[mydf$Grade %in% vocat] <- "Vocational"

或使用dplyr::case_when

library(dplyr)
mydf %>%
  mutate(Grade = case_when(Grade %in% prima ~ "Primary", 
                           Grade %in% secon ~ "Secondary", 
                           Grade %in% vocat ~ "Vocational"))
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.