【发布时间】:2018-09-19 13:05:55
【问题描述】:
我遇到了一些 R 代码问题。我正在尝试将列中的文本值分类到新列中。我的数据是 gis.stackexchange 网站上使用的标签集合,该网站有大约 2,500 行。我的目标是将标签分类为 COTS、FOSS 或其他。查看标签有两个“场景”;使用一次的标签(即 anaconda)和一个术语多次使用的标签(即 qgis、qgis-desktop、qgis-server 等)。这种情况适用于 COTS 和 FOSS 标签。
我的方法是执行以下操作:
- 创建一个包含所有代表 FOSS 的标签的向量
- 创建一个包含所有代表 COTS 的标签的向量
- 使用 ifelse 创建一个名为 software and code 的新列
- ifelse - 其中 tagName 是 %in% FOSS 然后编码为 FOSS
- 在 ifelse 中,在 FOSS 向量上使用 grep 来模式匹配可能多次使用的标签(即 qgis)并编码为 FOSS
- 对 COTS 重复此操作
我遇到了一个问题,即最后一个 grep (COTS) 被编码为 FOSS。显然有问题,但我似乎无法弄清楚问题所在。下面是代码和源数据的链接。
标签向量 -- 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"))))
当我运行代码时,会产生以下错误:argument 'pattern' has length > 1 and only the first element will be used
我确信这是一个非常简单的问题,但我似乎无法弄清楚。
【问题讨论】:
-
我建议你创建一个smaller reproducible example。你已经发布了完整的数据,但是一个小例子更容易理解,也可以帮助你理解答案;)
标签: r if-statement