Я пытаюсь собрать информацию каталога на основе текстового поиска. Найдите определенную строку в столбце Text
и поместите некоторое описание в новый столбец C_Organization
.Как установить новый столбец на основе нескольких условий в data.table?
Вот образец данных:
# load packages:
pacman::p_load("data.table",
"stringr")
# make sample data:
DE <- data.table(c("John", "Sussan", "Bill"),
c("Text contains MIT", "some text with Stanford University", "He graduated from Yale"))
colnames(DE) <- c("Name", "Text")
> DE
Name Text
1: John Text contains MIT
2: Sussan some text with Stanford University
3: Bill He graduated from Yale
поиск определенной строки и сделать новый data.table с новой колонки:
mit <- DE[str_detect(DE$Text, "MIT"), .(Name, C_Organization = "MIT")]
yale <- DE[str_detect(DE$Text, "Yale"), .(Name, C_Organization = "Yale")]
stanford <- DE[str_detect(DE$Text, "Stanford"), .(Name, C_Organization = "Stanford")]
# bind them together:
combine_table <- rbind(mit, yale, stanford)
combine_table
Name C_Organization
1: John MIT
2: Bill Yale
3: Sussan Stanford
Это погрузо-объединить подход работы отлично, но кажется немного утомительным. Можно ли сделать это за один шаг в data.table
?
Редактировать
Из-за мое плохое мастерство анализа данных и нечистые данные, мне нужно, чтобы сделать этот вопрос ясный:
реальных данные немного сложнее:
(1) Есть случаи, когда человек из более чем двух организаций, например
Jack, UC Berkeley, Bell lab
. и(2) То же лицо этой же организации появляется в течение другого года, например
Steven, MIT, 2011
,Steven, MIT, 2014
.Я хочу, чтобы выяснить:
(1) Сколько людей от каждой организации. Если один человек принадлежит к нескольким организациям, создайте организацию, которая больше всего является его организацией. (т. е. по популярности.) Например,
John, MIT, AMS, Bell lab
, еслиMIT
появляется 30 раз,AMS
12 раз,Bell lab
26 раз. Затем сделайтеMIT
своей организацией.(2) подсчитать, сколько человек на каждый год. Это не напрямую зависит от моего первоначального вопроса, но для последующего расчета я не хочу выбрасывать эти записи.
вы имеете в виду у вас есть вектор 'v = с ("MIT", "Yale", "Стэнфорд")', и вы хотите, чтобы получить все строки в 'DE 'имея это в столбце' text'? –
Да. Спасибо за вопрос. Вы высказали мой вопрос намного лучше. Я должен был упомянуть, что этот вектор может быть длиннее в реальном наборе данных. – Nick
Ваш вызов 'pacman ::' снижает воспроизводимость вопроса. Вы можете использовать 'sapply (c (" pkg1 "," pkg2 "), require)' – jangorecki