如何用R中的字符串字符替换一系列int值
How to replace a range of int values with string character in R
我想根据条件用字符串字符替换一系列整数值。
例如,我有一个数据框
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)
如果'Grade'中的数字落在prima中,例如Grade==610,我想将数字改为单词'Primary'。
我试过使用...
mydf$Grade[mydf$Grade == prima] <- "Primary"
mydf$Grade[mydf$Grade == secon] <- "Secondary"
mydf$Grade[mydf$Grade == vocat] <- "Vocational"
但是没有用。它没有 return 错误,但只有极少数值更改为 '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"
}
这也没有用。 'Grade' 中的所有值都变成了 'Primary'。
这两种方法我已经用真实数据尝试过,我也必须循环超过 10 年。
我不知道我做错了什么。我试过这些方法,当我想用 NaN 替换时它起作用了;但是,当我想用其他整数或字符串字符替换时,它不起作用。
任何建议将不胜感激。
==
进行逐元素比较。因为我们要在这里比较多个元素,所以使用 %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"))
# Gender Grade Indus
#1 1 Primary 15
#2 1 Primary 29
#3 2 Primary 32
#4 1 Primary 20
#5 2 Secondary 37
#6 2 Vocational 19
#7 1 Secondary 25
数据
mydf <- structure(list(Gender = c(1L, 1L, 2L, 1L, 2L, 2L, 1L), Grade = c(610L,
110L, 210L, 250L, 420L, 430L, 450L), Indus = c(15L, 29L, 32L,
20L, 37L, 19L, 25L)), class = "data.frame", row.names = c(NA, -7L))
我想根据条件用字符串字符替换一系列整数值。
例如,我有一个数据框
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)
如果'Grade'中的数字落在prima中,例如Grade==610,我想将数字改为单词'Primary'。
我试过使用...
mydf$Grade[mydf$Grade == prima] <- "Primary"
mydf$Grade[mydf$Grade == secon] <- "Secondary"
mydf$Grade[mydf$Grade == vocat] <- "Vocational"
但是没有用。它没有 return 错误,但只有极少数值更改为 '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"
}
这也没有用。 'Grade' 中的所有值都变成了 'Primary'。 这两种方法我已经用真实数据尝试过,我也必须循环超过 10 年。
我不知道我做错了什么。我试过这些方法,当我想用 NaN 替换时它起作用了;但是,当我想用其他整数或字符串字符替换时,它不起作用。 任何建议将不胜感激。
==
进行逐元素比较。因为我们要在这里比较多个元素,所以使用 %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"))
# Gender Grade Indus
#1 1 Primary 15
#2 1 Primary 29
#3 2 Primary 32
#4 1 Primary 20
#5 2 Secondary 37
#6 2 Vocational 19
#7 1 Secondary 25
数据
mydf <- structure(list(Gender = c(1L, 1L, 2L, 1L, 2L, 2L, 1L), Grade = c(610L,
110L, 210L, 250L, 420L, 430L, 450L), Indus = c(15L, 29L, 32L,
20L, 37L, 19L, 25L)), class = "data.frame", row.names = c(NA, -7L))