Условие с несколькими строками в столбцах R - PullRequest
1 голос
/ 27 февраля 2020

У меня есть этот фрейм данных:

a <- c(1,2,3,4, 5)
b <- c('Software Engineer', 'Data Engineer', 'HR Officer', 'Marketing Manager', 'Computer Engineer')

names(df) <- c('ID', 'Jobs')

Я хочу сгруппировать языки по некоторым категориям. Если каждое описание работы содержит «Программное обеспечение», «Данные» или «Компьютер», тогда категория для этого задания это "IT", если бы не категория "OTH". Результат должен выглядеть следующим образом:

 ID               Jobs  Category
  1  Software Engineer        IT
  2      Data Engineer        IT
  3         HR Officer       OTH
  4  Marketing Manager       OTH
  5  Computer Engineer        IT

В Python я могу использовать эти коды df["Jobs"].str.contains("Software|Data|Computer", na = False) в сочетании с np.select для получения категории. Однако я не знаю, как это сделать в R, пожалуйста, дайте мне несколько советов, чтобы решить эту проблему.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вот мое решение:

a <- c(1,2,3,4, 5)
b <- c('Software Engineer', 'Data Engineer', 'HR Officer', 'Marketing Manager', 'Computer Engineer')
df <- data.frame(a,b)
names(df) <- c('ID', 'Jobs')
df

  ID              Jobs
1  1 Software Engineer
2  2     Data Engineer
3  3        HR Officer
4  4 Marketing Manager
5  5 Computer Engineer

#Add Job Category

df$Category [ grep("Software|Data|Computer", df$Jobs)] <- "IT"
df$Category [is.na(df$Category)] <- "OTH"
df

  ID              Jobs Category
1  1 Software Engineer       IT
2  2     Data Engineer       IT
3  3        HR Officer      OTH
4  4 Marketing Manager      OTH
5  5 Computer Engineer       IT
1 голос
/ 27 февраля 2020

Мы можем использовать grepl, чтобы получить логический вектор, сопоставив «Программное обеспечение», «Данные» или «Компьютер» в столбце «Задания», преобразовав его в числовой индекс c и основанный на этой замене. значения с 'OTH' или 'IT'

df$Category <- c("OTH", "IT")[(grepl("Software|Data|Computer", df$Jobs) + 1)]
df$Category
#[1] "IT"  "IT"  "OTH" "OTH" "IT"

Или используйте ifelse с grepl

ifelse(grepl("Software|Data|Computer", df$Jobs), "IT", "OTH")

data

df <- structure(list(ID = c(1, 2, 3, 4, 5), Jobs = structure(c(5L, 
2L, 3L, 4L, 1L), .Label = c("Computer Engineer", "Data Engineer", 
"HR Officer", "Marketing Manager", "Software Engineer"), 
class = "factor")), class = "data.frame", row.names = c(NA, 
-5L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...