【发布时间】:2021-05-21 12:30:40
【问题描述】:
我正在为科学期刊尝试不同的聚类方法,并且我有一个具有这种结构的数据框:
'data.frame': 30883 obs. of 11 variables:
$ Title : chr "CA - A Cancer Journal for Clinicians" "MMWR. Recommendations and reports : Morbidity and mortality weekly report. Recommendations and reports / Centers for Disease Co"| __truncated__ "Nature Reviews Materials" "Quarterly Journal of Economics" ...
$ ISSN1 : chr "15424863" "10575987" "20588437" "00335533" ...
$ ISSN2 : chr "00079235" "15458601" NA "15314650" ...
$ SubCat1 : chr "Hematology" "Epidemiology" "Biomaterials" "Economics and Econometrics " ...
$ SubCat2 : chr "Oncology " "Health Information Management" "Electronic, Optical and Magnetic Materials" NA ...
$ SubCat3 : chr NA "Health social science" "Energy" NA ...
$ SubCat4 : chr NA "Health, Toxicology and Mutagenesis" "Materials Chemistry" NA ...
$ SubCat5 : chr NA "Medicine " "Surfaces, Coatings and Films " NA ...
$ SubCat6 : chr NA NA NA NA ...
$ Top.Level : chr "Health Sciences" "Health Sciences" "Physical Sciences and Engineering" "Social Sciences and Humanities" ...
$ Primary.Level: chr NA NA NA NA ...
我的问题是 SubCat 列中的元素没有特定的顺序,这意味着例如 Oncology 可能出现在这 6 个列中的任何一个列中,尽管尽管列号是相同的类别。例如,假设 SubCat1 有 136 个不同的术语,但其中 80 个与具有 240 个不同术语的 SubCat4 相同。总体而言,两列的水平高达 136+240-80 个不同的因素。
我想对所有 6 个 SubCat 列进行 1 热编码,因此我为所有 6 个 SubCat 列中的每个不同因素都有一个列(无论它是否出现在多个列中,我都想要一个列)。我试图避免通过 for 和 dplyr 操作手动对所有内容进行编程,但到目前为止,我还没有找到任何简单的方法(我通常最终将所有六列合并为每列 1hotcod,这意味着很多重复的列)。
有什么优雅的方法可以解决这个问题吗?也许我在问一些明显的问题,但我还没有找到它......
谢谢
编辑:这里有一些在“肿瘤学”中有重复的行:
dput(p[1:10, ])
structure(list(Title = c("Cancer Treatment Reviews", "npj Breast Cancer",
"Journal of Thoracic Oncology", "International Journal of Radiation Oncology Biology Physics",
"Radiotherapy and Oncology", "Prostate Cancer and Prostatic Diseases",
"Oral Oncology", "Lung Cancer", "Annals of Surgical Oncology",
"Frontiers in Oncology"), ISSN1 = c("03057372", "23744677", "15561380",
"03603016", "18790887", "13657852", "18790593", "01695002", "10689265",
"2234943X"), ISSN2 = c(NA, NA, "15560864", "1879355X", "01678140",
"14765608", "13688375", "18728332", "15344681", NA), SubCat1 = c("Medicine",
"Oncology", "Medicine", "Cancer Research", "Hematology", "Cancer Research",
"Cancer Research", "Cancer Research", "Oncology", "Oncology"),
SubCat2 = c("Oncology", "Pharmacology medical", "Oncology",
"Oncology", "Oncology", "Oncology", "Oncology", "Oncology",
"Surgery ", "Cancer Research 2"), SubCat3 = c("Radiology, Nuclear Medicine and Imaging ",
"Radiology, Nuclear Medicine and Imaging ", "Pulmonary and Respiratory Medicine ",
"Radiation", "Radiology, Nuclear Medicine and Imaging ",
"Urology ", "Oral Surgery ", "Pulmonary and Respiratory Medicine ",
NA, NA), SubCat4 = c(NA, NA, NA, "Radiology, Nuclear Medicine and Imaging ",
NA, NA, NA, NA, NA, NA), SubCat5 = c(NA_character_, NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_
), SubCat6 = c(NA_character_, NA_character_, NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_,
NA_character_, NA_character_, NA_character_), Top.Level = c("Health Sciences",
"Health Sciences", "Health Sciences", "Health Sciences",
"Health Sciences", "Health Sciences", "Health Sciences",
"Health Sciences", "Health Sciences", "Health Sciences"),
Primary.Level = c("Medicine and Dentistry", NA, NA, "Medicine and Dentistry",
NA, NA, NA, "Medicine and Dentistry", NA, NA)), .Names = c("Title",
"ISSN1", "ISSN2", "SubCat1", "SubCat2", "SubCat3", "SubCat4",
"SubCat5", "SubCat6", "Top.Level", "Primary.Level"), row.names = c("469",
"493", "590", "1208", "1316", "1535", "1718", "1769", "1856",
"1867"), class = "data.frame")
【问题讨论】:
-
str()对于理解数据的结构非常有用,但对于为我们提供示例数据并无帮助。您能否找到几行(不超过 10 行)来说明问题,即它们在不同的子目录列中有一些重叠的元素,并以可复制粘贴的方式共享这些数据?dput()制作 R 对象的复制/粘贴版本:dput(your_data[selected_rows, ]).
标签: r dataframe dplyr multiple-columns one-hot-encoding