我正在尝试为矩阵的每一行计算出多少列的值大于指定值.对不起,我问这个简单的问题,但我无法弄明白.
对于我感兴趣的一些空间点,我已经从多年光栅的栅格堆栈中提取了最大温度值.数据类似于:
data <- cbind('1990' = c(25, 22, 35, 42, 44), '1991' = c(23, 28, 33, 40, 45), '1992' = c(20, 20, 30, 41, 43))
1990 1991 1992
1 25 23 20
2 22 28 20
3 35 33 30
4 42 40 41
5 44 45 43
Run Code Online (Sandbox Code Playgroud)
我希望最终得出每个地点温度高于30的年数,例如:
yr.above
1 0
2 0
3 2
4 3
5 3
Run Code Online (Sandbox Code Playgroud)
我尝试过一些东西,但是它们不起作用并且非常不合逻辑(例如尝试长度(数据[1:长度(数据),(等等没有意义))或应用(数据,1,长度) (数据)> 30),我知道这些没有意义,但我有点卡住了.
我有一个大约13,000个URL的列表,我想从中提取信息,但是,并非每个URL实际存在.事实上,大多数人没有.我刚尝试通过所有13,000个网址,html()但需要很长时间.我试图找出如何在解析它们之前查看url是否实际存在html().我已经尝试使用httr和GET()功能,以及rcurls和url.exists()功能.由于某种原因,即使URL确实存在,也url.exist()始终返回FALSE值,并且我使用的方式GET()总是返回成功,我认为这是因为页面被重定向.
以下URL表示我正在解析的页面类型,第一个不存在
urls <- data.frame('site' = 1:3, 'urls' = c('https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-1&unit=SLE010',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=HMM202',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=SLE339'))
urls$urls <- as.character(urls$urls)
Run Code Online (Sandbox Code Playgroud)
因为GET(),问题是第二个URL实际上并不存在,但它被重定向,因此返回"成功".
urls$urlExists <- sapply(1:length(urls[,1]),
function(x) ifelse(http_status(GET(urls[x, 'urls']))[[1]] == "success", 1, 0))
Run Code Online (Sandbox Code Playgroud)
因为url.exists(),即使第一个和第三个URL确实存在,我也会返回三个FALSE.
urls$urlExists2 <- sapply(1:length(urls[,1]), function(x) url.exists(urls[x, 'urls']))
Run Code Online (Sandbox Code Playgroud)
我查了一下这两个职位1,2,但我宁愿不使用的用户代理,只是因为我不知道如何找到我的,或者它是否会使用其他计算机上的验证码不同人的变化.因此,使代码更难以被其他人接收和使用.两篇帖子的答案建议使用GET()in httr.这似乎GET()是首选的方法,但我需要弄清楚如何处理重定向问题.
在解析它们之前,任何人都可以建议在R中测试URL的存在html()吗?我也很乐意为此问题提出任何其他建议的工作.
更新:
在查看了返回的值后,GET()我想出了一个解决方法,详细了解答案.
我试图从我建立的语料库中删除一些单词,但它似乎没有起作用.我首先浏览所有内容并创建一个数据框,按照频率顺序列出我的单词.我使用此列表来识别我不感兴趣的单词,然后尝试创建一个删除了单词的新列表.但是,单词仍保留在我的数据集中.我想知道我做错了什么以及为什么这些话没有被删除?我已经包含以下完整代码:
install.packages("rvest")
install.packages("tm")
install.packages("SnowballC")
install.packages("stringr")
library(stringr)
library(tm)
library(SnowballC)
library(rvest)
# Pull in the data I have been using.
paperList <- html("http://journals.plos.org/plosone/search?q=nutrigenomics&sortOrder=RELEVANCE&filterJournals=PLoSONE&resultsPerPage=192")
paperURLs <- paperList %>%
html_nodes(xpath="//*[@class='search-results-title']/a") %>%
html_attr("href")
paperURLs <- paste("http://journals.plos.org", paperURLs, sep = "")
paper_html <- sapply(1:length(paperURLs), function(x) html(paperURLs[x]))
paperText <- sapply(1:length(paper_html), function(x) paper_html[[1]] %>%
html_nodes(xpath="//*[@class='article-content']") %>%
html_text() %>%
str_trim(.))
# Create corpus
paperCorp <- Corpus(VectorSource(paperText))
for(j in seq(paperCorp))
{
paperCorp[[j]] <- gsub(":", " ", paperCorp[[j]])
paperCorp[[j]] <- gsub("\n", " ", paperCorp[[j]])
paperCorp[[j]] <- gsub("-", " ", paperCorp[[j]])
} …Run Code Online (Sandbox Code Playgroud) G'day,我正在处理一个大型数据集,其中包含约125,000个lon/lat位置和日期,用于物种存在/缺失记录.对于每个地点,我想弄清楚日期和日期前3个月内每个地点的天气状况.为此,我已经下载了在5年期间获取数据的给定天气变量(例如,最高温度)的每日天气数据.我总共有1,826个光栅文件,全部在2-3mb之间.
我曾计划堆叠所有光栅文件,然后从每个光栅(1,826)中为每个点提取一个值.这将产生一个巨大的文件,我可以用它来搜索我需要的日期.但是,这是不可能的,因为我无法堆叠那么多栅格.我尝试将栅格分成500个堆叠,这可行,但它产生的文件大约是1Gb而且很慢(行,125,000;列,500).此外,当我尝试将所有这些文件放入R中以创建大数据帧时,它不起作用.
我想知道是否有办法处理R中的这一数据量,或者是否有一个我可以用来帮助的包.我可以使用像ff这样的包吗?有没有人有任何建议采用功耗较低的方法来做我想做的事情?我曾经想过像lapply函数这样的东西,但之前从未使用过,我不确定从哪里开始.
任何帮助都会非常棒,感谢您的时间.我目前使用的代码没有成功,如下所示.
亲切的问候,亚当
library(raster)
library(rgdal)
library (maptools)
library(shapefiles)
# To create weather data files, first set the working directory to the appropriate location (i.e., maxt)
# list of raster weather files
files<- list.files(getwd(), pattern='asc')
length(files)
memory.size(4000)
memory.limit(4000)
# read in lon/lat data
X<-read.table(file.choose(), header=TRUE, sep=',')
SP<- SpatialPoints(cbind(X$lon, X$lat))
#separate stacks into mannageable sizes
s1<- stack(files[1:500])
i1 <- extract( s1,SP, cellnumbers = True, layer = 1, nl = 500)
write.table(i1, file="maxt_vals_all_points_all_dates_1.csv", sep=",", row.names= FALSE, col.names= TRUE)
rm(s1,i1)
s2<- stack(files[501:1000]) …Run Code Online (Sandbox Code Playgroud) G'day所有人,
我试图得到一些高程数据,我有700点.我想我可能会使用提供给同一个问题的代码(转换为纬度/经度到R的高度),不幸的是我在使用geonames包时遇到错误,并且最佳答案提供的网站没有澳大利亚海拔数据(错误)在FYI下面提供).
我发现另一个网站为澳大利亚提供了非常准确的高程数据,但我不知道如何从网页中提取信息.我认为它正在使用谷歌提升API,但我再次不知道如何访问它.
当我将'lat,lon'坐标放入'搜索位置'框时,它会在地图下方提供高程数据.但是,我似乎无法在源页面中找到它.该网站是http://www.daftlogic.com/sandbox-google-maps-find-altitude.htm.
一些示例lon lat值有效:
-36.0736,146.9442
-36.0491,146.4622
我想知道是否有人可以帮我从R查询这个网站,并提取高程数据?或者看起来好像很麻烦?我意识到网站上有一个批处理功能(最多100个位置),但是能够从R执行此操作会很酷.
谢谢大家,对不起,如果这是非常明显的.
干杯,亚当
错误
使用地理名称时:
elevation <- GNgtopo30(adult$lat, adult$lon)
Error in getJson("gtopo30JSON", list(lat = lat, lng = lng)) :
error code 10 from server: Please add a username to each call in order for geonames to be able to identify the calling application and count the credits usage.
In addition: Warning message:
In readLines(u) :
incomplete final line found on 'http://ws.geonames.org/gtopo30JSON? lat=-36.0736&lng=146.9442'
Run Code Online (Sandbox Code Playgroud)
使用查询代码时:
library(RCurl)
library(XML)
url <- paste("http://earthtools.org/height", …Run Code Online (Sandbox Code Playgroud) G'day,我有一份按地点分组的个人名单.我想生成一个新变量,根据每个人的位置为每个人提供一个数字.我希望我的数据看起来像是:
place individual
here 1
here 2
here 3
there 1
there 2
somewhere 1
somewhere 2
Run Code Online (Sandbox Code Playgroud)
我写了这个:
nest="ddd", "ddd", "fff", "fff", "fff", "fff", "qqq", "qqq"
def individual(x):
i = 0
j = 1
while i < len(x):
if x[i] == x[i-1]:
print(j+1)
i = i + 1
j = j + 1
else:
print(1)
i = i + 1
j = 1
individual(nest)
Run Code Online (Sandbox Code Playgroud)
这会打印出我想要的值,但是,当我将返回放在那里时,它会突破循环并仅返回第一个值.我想知道如何返回这些值,以便我可以将它们作为新列添加到我的数据中?
我读到了收益率?但不确定它是否合适.谢谢您的帮助!
干杯,亚当
我是html抓取世界的新手,我很难在特定标题下拉入段落,在R中使用rvest
我想从多个站点中获取信息,这些站点都具有相对类似的设置.它们都有相同的标题,但标题下的段落数量可能会发生变化.我能够使用以下代码在标题下刮取特定段落:
unitCode <- data.frame(unit = c('SLE010', 'SLE115', 'MAA103'))
html <- sapply(unitCode, function(x) paste("http://www.deakin.edu.au/current-students/courses/unit.php?unit=",
x,
"&return_to=%2Fcurrent-students%2Fcourses%2Fcourse.php%3Fcourse%3DS323%26version%3D3",
sep = ''))
assessment <- html[3] %>%
html() %>%
html_nodes(xpath='//*[@id="main"]/div/div/p[3]') %>%
html_text()
Run Code Online (Sandbox Code Playgroud)
'xpath'元素引入评估标题下的第一段.有些页面在评估标题下有多个段落,如果我改变'xpath'变量来具体指定它们,我可以获得,例如p [4]或p [5].不幸的是,我想在数百页上迭代这个过程,所以每次更改xpath是不合适的,我甚至不知道每个页面中会有多少段落.
我认为,考虑到页面设置的不确定性,在我感兴趣的标题之后拉出所有<p>是最好的选择.
我想知道是否有办法在<h3>评估<h3>之后使用rvest或其他一些R刮包来刮掉所有<p>?
我只是想知道是否有人有一个转换表来解决R中的栅格问题.我想知道这些数字是用米表示的:
分辨率:0.08333333,0.08333333
分辨率:0.009398496,0999398496
分辨率:0.002349,0.002349 = 250m(我认为)
我真的想知道设置栅格对象以使单元格大小为1km ^ 2的分辨率.我正在使用横跨澳大利亚国家的栅格.
在此先感谢大家.
干杯,亚当
G'day,
我有大量的lon/lat坐标,这些坐标位于CRS Australian Geodetic Datum 66/84(简称AGD66)中.我想将这些坐标从AGD66更改为WGS84,因为它们之间有大约200米的差异,我在WGS84中有其他坐标和图层.我试过这样做:
lon lat
147.1428 -43.49083
library(rgdal)
pts<-read.table(file.choose(),header=TRUE,sep=',')
# I first project the pts in their original CRS
pts66<-project(cbind(pts$lon,pts$lat), "+init=epsg:4202")
# Then to transform it to WGS84
pts84 = spTransform(pts66,CRS("+init=epsg:3033"))
Error in function (classes, fdef, mtable) :
unable to find an inherited method for function "spTransform", for signature "matrix", "CRS"
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么我得到这个错误,或者对如何我可以从AGD66这些坐标改变到WGS84有什么建议?感谢您的帮助.
干杯,
亚当