Как удалить элементы файла .csv на основе другого файла .csv?

#r #csv

#r #csv

Вопрос:

Я делаю скрипт для поиска kew-word в тексте (на языке R). На данный момент я могу получить только .csv (abstract_atomized.csv) список слов, атомизированных и классифицированных в соответствии с их частотой. У меня есть другой список .csv с набором распространенных и бесполезных английских слов (wordlistenglish.csv), которые я хотел бы удалить из моего первого списка, чтобы сохранить только соответствующие элементы. Я не знаю, как я мог бы эффективно сделать это на R. Не могли бы вы мне помочь?

Спасибо.

     library(pubmed.mineR)
    library(scholar)
    library(tools)
    library(stringr)
    abstractR <- readabs(abstract)
    atomized_text <- word_atomizations(abstractR)
    file_without_ext <- file_path_sans_ext(abstract)
    atomized_file_name <- paste0(file_without_ext, '_atomized.csv')
    write.csv(atomized_text, atomized_file_name)
    output_text <- paste0('Most used words described in ',atomized_file_name,' take the time to read them and to select the relevent key words')
    print(output_text)
abstract_atom<- read.csv('abstract_atomized.csv')
wordlist<- read.csv('wordlistenglish.csv')
abstract_atom[!(abstract_atom$words %in% wordlist$words),]
write.csv(abstract_atom, file='abstract_atom.csv')
  

Обновить

структура данных (я не могу поместить всю структуру, потому что в ней слишком много символов: около 6000 слов для первого списка и тысяча для второго)

структура списка атомов :

     words = structure(c(2772L, 4003L, 737L, 2371L, 3797L, 4988L
    ), .Label = c("-29", "-325", "-328", "-337", "-59", "-dependent", 
    "-dichlorophenyl)-1", "-disulfonic", "-induced", "-maleimidyldistilbene-2", 
    "-sh", "-so(3)(-))", ""giacomo", ""paradox", "(-323", "(-335", 
    "(-s-)", "(-so(-))", "(-so(2)(-)", "(#)contributed", "(1)department", 
    "(1)institut", "(1)instituto", "(1)laboratoire", "(1)laboratory", 
    "(1)plant", "(1)unité", "(10)laboratory", "(2-cys", "(2)bio-pharmaceutical", 
    "(2)department", "(2)sorbonne", "(2)université", "(219)cgpc(222)", 
    "(28)wcsys(32)", "(3)institute", "(3)laboratoire", "(3)laboratory", 
    "(3)plant", "(3d)", "(4)laboratoire", "(4)laboratory", "(4)sorbonne", 
    "(5)bio-pharmaceutical", "(5)department", "(6)laboratoire", 
    "(6)laboratory", "(6)plant", "(7)laboratoire", "(7)laboratory", 
    "(7)spemann", "(8)laboratory", "(8)université", "(9)laboratoire", 
    "(a(4)", "(a(4)-gapdh)", "(and", "(arabidopsis", "(aromatic", 
    "(atprk)", "(b-containing", "(bio-phase)", "(biogssg)", "(bioss)", 
    "(c86)", "(cb)", "(cr)", "(crpgk1)", "(crprk)", "(crtk)", 
    "(crtkapo)", "(cx(2)c)", "(cys(149)-ssg)", "(cys(29))", "(cys(87))", 
    "(dcmu)", "(deduced", "(diamide", "(e", "(e(m))", "(eda)", 
    "(eeg)", "(er)", "(fd)", "(for", "(frias)", "(ftr)", "(gapc1", 
    "(gapdh)", "(glyceraldehyde-3-phosphate", "(glycine", "(gpxs)", 
    "(grx)", "(grxs)", "(gsh)", "(h2o2)", "(heat-shock", "(hsp70", 
    "(i", "(icl)", "(inra)", "(isoform", "(lhcii)", "(metso)", 
    "(mms)", "(msrs)", "(multifunctional)", "(nadp-mdh)", "(negative", 
    "(no)", "(o2*)", "(pdi)", "(pgk1)", "(phaseolus", "(pk(a)=5", 
    "(pm)", "(populus", "(prk)", "(prxii)", "(prxs)", "(ptm)", 
    "(real", "(reduced", "(rns)", "(ros)", "(sll1621)", "(sll1908)", 
    "(slr1562", "(slr1849)", "(sno)", "(sorghum", "(spinacia", 
    "(ss)", "(ssg)", "(tk)", "(tpi)", "(tpp)", "(trx", "(trx)", 
    "(trx)-dependent", "(trxf)", "(trxh1)", "(trxh2)", "(trxs)", 
    "(upmc)", "(β/α)8-barrel", "[(35)s]cysteine", "[4fe-4s]", 
    "[fe2s2]", "[gsh]/[gsno]", "[gsh]/[gssg]", "amp;", " /-", " 300", 
    " 80", "<2-fold", "~10-fold", "~20-fold", "~6-fold", "06", 
    "1-cys", "1-dimethylurea", "10 μm", "1052", "11", "110", 
    "1136", "1188", "119", "12", "125", "1278", "13", "133", 
    "1417", "16", "18", "190", "2-cys", "2-cys-peroxiredoxin", 
    "2)", "200", "225", "24", "25", "26", "29", "2nd", "3-(3", 
    "3-bisphosphoglycerate", "3-phosphoglycerate", "30", "33", 
    "381", "383", "392", "3d", "3d-structure", "3rd", "4-acetamido-4", 
    "40126", "41092", "42", "492", "54506", "55", "56", "561", 
    "7)", "70 kda)", "70803", "75005", "79104", "81", "8226", 
    "86", "8600", "8618", "9)", "90", "90095", "91405", "94720-3102", 
    "98%", "å", "a(2)b(2)", "a(4)-gapdh", "a(4)-glyceraldehyde-3-phosphate", 
    "a(8)b(8)", "a(n)b(n)-gapdh", "aa", "ab", "åb", "abdelmohsen", 
    "abe", "abedin", "abeliovich", "ability", "abiotic", "able", 
    "abnormally", "absence", [...] "zhong", "zhou", "zhu", "zhuang", 
    "zimmer", "zio", "ziparo", "zj", "zm", "zn", "zois", "zoladek", 
    "zong", "zorzano", "zughaier", "zw", "zx", "β-sheet"), class = "factor"), 
    Freq = c(161L, 150L, 114L, 98L, 90L, 79L)), row.names = c(NA, 
6L), class = "data.frame")
  

структура списка слов

 structure(list(the = structure(c(8762L, 9971L, 9929L, 9917L, 
9628L, 9437L), .Label = c("a", "aa", "aaa", "aaron", "ab", "abandoned", 
"abc", "aberdeen", "abilities", "ability", "able", "aboriginal", 
"abortion", "about", "above" [...] "yukon", "z", "za", "zambia", "zdnet", "zealand", "zen", "zero", 
"zimbabwe", "zinc", "zip", "zoloft", "zone", "zones", "zoning", 
"zoo", "zoom", "zoophilia", "zope", "zshops", "zu", "zum", "zus"
), class = "factor")), row.names = c(NA, 6L), class = "data.frame")
  

Комментарии:

1. Чтобы получить ответ и предотвратить отклонение вашего вопроса, вам действительно нужно предоставить часть кода из вашей попытки решить эту проблему

2. да, спасибо, я обновляю свой пост прямо сейчас

3. Код, который вы включили сюда, похоже, уже включает мое решение. Это правильно? Проблема все еще существует после того, как вы ее добавили?

4. Да, извините, я забыл уточнить, что это исправленный код. И, к сожалению, да, это не работает. В первом списке хранятся нежелательные слова, содержащиеся во втором списке.

5. Обратите внимание, что вы нигде не назначаете отфильтрованный data.frame, поэтому, когда вы write.csv записываете исходный abstract_atom data.frame. Добавить abstract_atom<- перед строкой фильтрации.

Ответ №1:

Это общий формат, который вы должны использовать, адаптированный к вашей реальной структуре данных:

 filtered_list<- list1[!(list1$words %in% list2$words),]
  

Он сохраняет все строки, в list1 которых слово не появляется в list2 . Если вы хотите сделать это с помощью tidyverse (который медленнее, но часто удобнее для кодирования), это будет выглядеть следующим образом:

 require(dplyr)
filtered_list<- list1 %>% filter(!(words %in% list2$words))
  

Комментарии:

1. Большое спасибо. Но, как ни странно, это не удаляет строку, которая находится в list2 (wordlistenglish.csv).

2. Как я уже сказал — это должно быть адаптировано к реальной структуре данных. Если вы могли бы предоставить dput(head()) для обоих ваших списков, должно быть легко адаптировать решение к ним.

3. Хорошо, вот структура для atomlist : structure(list(X = c(2820L, 4068L, 765L, 2418L, 3862L, 5081L), words = structure(c(2772L, 4003L, 737L, 2371L, 3797L, 4988L ), .Label = c("-29", "-325", "-328", "-337", "-59", "-dependent", "-dichlorophenyl)-1", "-disulfonic", "-induced", "-maleimidyldistilbene-2", "-sh", "-so(3)(-))", ""giacomo", ""paradox", "(-323", "(-335", "(-s-)", "(-so(-))", "(-so(2)(-)", "(#)contributed", "(1)department", "(1)institut", [...]

4. И здесь для wordlist : structure(list(the = structure(c(8762L, 9971L, 9929L, 9917L, 9628L, 9437L), .Label = c("a", "aa", "aaa", "aaron", "ab", "abandoned", "abc", "aberdeen", "abilities", "ability", "able", "aboriginal", "abortion", "about", "above", "abraham", "abroad", "abs", "absence", "absent", "absolute", "absolutely", "absorption", "abstract",[...]

5. Я не могу это использовать. Можете ли вы указать полный вывод в своем вопросе?