У меня проблема с кодом RЯ пытаюсь классифицировать текстовые значения из столбца в новый столбец.Мои данные представляют собой набор тегов, используемых на сайте gis.stackexchange, который содержит ~ 2500 строк.Моя цель - классифицировать теги как COTS, FOSS или другие.При просмотре тегов есть два «сценария»;теги, которые используются один раз (т. е. anaconda) и теги, для которых термин используется несколько раз (например, qgis, qgis-desktop, qgis-server и т. д.).Этот сценарий верен как для тегов COTS, так и для тегов FOSS.
Мой подход заключался в следующем:
- создать вектор со всеми тегами, представляющими FOSS
- createвектор со всеми тегами, представляющими COTS
- , создает новый столбец, называемый программным обеспечением и кодом, используя ifelse
- ifelse - где tagName равно% в% FOSS, а затем кодируется как FOSS
- в ifelse используйте grep для вектора FOSS для сопоставления тегов соответствия, которые можно использовать несколько раз (например, qgis), и используйте код FOSS
- Повторите это для COTS
Я получаюпроблема, когда последний grep (COTS) кодируется как FOSS.Очевидно, что-то не так, но я не могу понять проблему.Ниже приведен код и ссылка на исходные данные.
Общая папка с исходным CSV
Векторы тегов - FOSS и COTS
foss <- c("anaconda", "android", "apache", "aptana", "google", "blender", "cordova",
"docker", "drupal", "eclipse", "facebook", "firefox", "ftools", "fwtools",
"geodjango", "geopandas", "geomoose", "geonetwork", "geonode", "geotools",
"ggmap", "ggplot2", "gimp", "github", "gme", "chrome", "gvsig", "h2gis",
"hadoop", "inkscape", "lastools", "laszip", "mongodb", "neo4j", "numpy",
"open-data-kit", "opencv", "opendronemap", "openev", "opengeo-suite-composer",
"opengl", "openjump", "openstreetmap", "opentopomap", "opentripplanner", "openwind",
"orfeo-toolbox", "pandas", "pdal", "pgrouting", "pg2shape", "phonegap",
"plpgsql", "ppygis", "pydev", "pygdal", "pyproj", "pyqspatialite", "rasterlite",
"raster2pgsql", "rdal", "saga", "shapely", "shp2pgsql", "sp", "sf",
"spatialite-gui", "three-js", "unity3d", "wordpress", "youtube", "bing-maps",
"dropbox", "instagram", "sketchup", "carto", "django", "gdal", "geoserver",
"grass", "jupyter", "leaflet", "mapbox", "matplotlib", "mysql", "ogr", "openlayers",
"osgeo", "osm", "pgadmin", "postgis", "postgresql", "proj4", "pyqgis", "qgis",
"qt", "scikit", "scipy", "tilemill")
cots <- c("autodesk", "bentley", "cityengine", "drone2map", "ecognition", "envi", "er-mapper",
"et-geowizards", "excel", "geomatica", "geosoft", "global-mapper", "illustrator",
"mac", "matlab", "microstation", "modelbuilder", "pix4d", "plsql", "powerpoint",
"silverlight", "spss", "tableau", "xtools-pro", "mapinfo", "arc", "oracle",
"erdas", "esri", "fme", "microsoft", "-analyst")
Создать новый столбец с классифицированными значениями, рассчитанными на основе вектора тега
tags$software <- ifelse(tags$tagName %in% foss, "FOSS",
ifelse(grep(foss, tags$tagName, fixed = TRUE), "FOSS",
ifelse(tags$tagName %in% cots, "COTS",
ifelse(grep(cots, tags$tagName, fixed = TRUE), "COTS",
"other"))))
Когда я запускаю код, выдается следующая ошибка: аргумент 'pattern' имеет длину> 1, и только первый элемент будетб
Я уверен, что это очень простая проблема, но я не могу понять это.