我有一堆XML文件和一个R脚本,可以将其内容读入数据框.但是,我现在得到了我想像往常一样解析的文件,但是它们的命名空间定义中有些东西不允许我通常使用XPath表达式选择它们的值.
XML文件是这样的:
xml_nons.xml
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<Node>
<Name>Name 1</Name>
<Title>Title 1</Title>
<Date>2015</Date>
</Node>
</XML>
Run Code Online (Sandbox Code Playgroud)
和另外一个:
xml_ns.xml
<?xml version="1.0" encoding="UTF-8"?>
<XML xmlns="http://www.nonexistingsite.com">
<Node>
<Name>Name 2</Name>
<Title>Title 2</Title>
<Date>2014</Date>
</Node>
</XML>
Run Code Online (Sandbox Code Playgroud)
xmlns指向的URL不存在.
我使用的R代码是这样的:
library(XML)
xmlfiles <- list.files(path = ".",
pattern="*.xml$",
full.names = TRUE,
recursive = TRUE)
n <- length(xmlfiles)
dat <- vector("list", n)
for(i in 1:n){
doc <- xmlTreeParse(xmlfiles[i], useInternalNodes = TRUE)
nodes <- getNodeSet(doc, "//XML")
x <- lapply(nodes, function(x){ data.frame(
Filename = xmlfiles[i],
Name = xpathSApply(x, ".//Node/Name" , xmlValue),
Title …
Run Code Online (Sandbox Code Playgroud) 如何仅使用purrr包从嵌套列表中提取元素?在这种情况下,我希望在分割data.frame后得到一个截距矢量.我已经使用lapply()完成了我需要的东西,但我想只使用函数purrr包.
library(purrr)
mtcars %>%
split(.$cyl) %>%
map( ~lm(mpg ~ wt, data = .)) %>% # shorthand NOTE: ~ lm
lapply(function(x) x[[1]] [1]) %>% # extract intercepts <==is there a purrr function for this line?
as_vector() # convert to vector
Run Code Online (Sandbox Code Playgroud)
我试过map()和at_depth()但似乎没有什么对我有用.
我不是SOAP和WSDL的专家,但我有Perl代码,我想将其移植到R.
Perl代码看起来像这样(来自https://www.pharmgkb.org/resources/downloads_and_web_services.jsp):
use SOAP::Lite;
import SOAP::Data 'type';
sub main {
my $argcount = scalar (@ARGV);
if ($argcount != 1) {
print "usage: diseases.pl <PharmGKB accession id>\n";
exit -1;
}
# make a web services call to server
my $call = SOAP::Lite
-> readable (1)
-> uri('PharmGKBItem')
-> proxy('http://www.pharmgkb.org/services/PharmGKBItem')
-> searchDisease($ARGV[0]);
if ($call->fault) {
print $call->faultcode . ": " . $call->faultstring . "\n";
} else {
my $result = $call->result;
Run Code Online (Sandbox Code Playgroud)
阅读有关rsoap和SSOAP包的内容,但没有得到任何好消息.我需要的是完全支持,例如调用服务并提供库来解析输出.我更喜欢一些库而不是原始编码.我对XML包很好,对RCurl不太好.我认为R中没有好的和当前的(积极维护的)支持是正确的吗?
RODBC是R中用于将数据从数据库导入R的主要库.RODBC
似乎有能力"猜测"列的数据类型,我觉得它特别烦人.
我在test.xls
这里上传了一个文件,或者您可以自己创建一个xls文件:
col_a
,第二列命名col_b
.col_a
,我在这个列上键入了92行的字母'
)library(RODBC)
setwd("C:/Users/hke775/Documents/Enoch/MISC/R_problems/RODBC")
channel <- odbcConnectExcel("test.xls",readOnly=TRUE)
dummy.df <- sqlFetch(channel,"Sheet1")
odbcClose(channel)
Run Code Online (Sandbox Code Playgroud)
你会看到,在dummy.df
,col_b
是所有NA
的1923
在此列了.
如果您想1923
再次查看,可以将第1行更改col_b
为数字,然后再返回.
这非常烦人,因为我不喜欢手动修改数据.我需要使用其他包做XLS进口,但我找不到其他的包做的那样顺利RODBC
(我试过gdata
和xlsReadWrite
).
我在sqlFetch
命令中遗漏了什么,并造成麻烦吗?谢谢.
我有一个像这样的data.frame:
(t=structure(list(count = c(NA, 2, NA, NA, NA, 8, NA, NA, NA)), .Names = "count", row.names = c(NA,-9L), class = "data.frame"))
count
1 NA
2 2
3 NA
4 NA
5 NA
6 8
7 NA
8 NA
9 NA
Run Code Online (Sandbox Code Playgroud)
R具有NA值很好但有时它会咬我.我经常忘记它,并尝试像这样做子集
> t[t$count>=1,]
[1] NA 2 NA NA NA 8 NA NA NA
Run Code Online (Sandbox Code Playgroud)
输出包括所有NA行.(我不喜欢)
经过一个小时的错误搜索后,我将代码更改为此,这就是我想要的(想象大数据帧有很多非NA结果,只有少数"隐藏得很好"的NA):
> t[t$count>=1&!is.na(t$count),]
[1] 2 8
Run Code Online (Sandbox Code Playgroud)
1.是否有"as.integer"功能的功能,以便我可以这样做:
T [as.integer.EXCLUDE.NA(T $计数)> = 1,]
我想在其他as.xxxx函数中使用这样的功能.基本上强制R停止像统计学家一样思考并且不同地对待NA(例如,像NULL(我不确定NULL会解决我的问题)(这不起作用:t $ count [3] < - 由于某种原因为NULL)
2.或者我将如何运行
transform(t, replace all NAs …
Run Code Online (Sandbox Code Playgroud) 用户有一个大表(3+ 十亿行)。为了加快接下来几个月的查询速度,必须在远程数据库上创建索引。
假设有一个名为的连接conn
- 创建索引并使其在与数据库断开连接后持续存在的最佳方法是什么。
例如,
library(DBI)
sql<-'CREATE INDEX idx_pmid ON medcit (pmid ASC);'
dbExecute(conn,sql)
dbDisconnect(conn)
Run Code Online (Sandbox Code Playgroud)
上面的代码似乎有效,但是如何以某种方式验证索引(确保它确实存在并加快未来的查询速度)?换句话说 - 用户如何检查索引的存在?另外,我是否需要以某种方式发出 COMMIT 命令?
我需要从互联网上读取一个XML文件并重新塑造它.这是我迄今为止的XML文件和代码.
library(XML)
url='http://ClinicalTrials.gov/show/NCT00001400?displayxml=true'
doc = xmlParse(url,useInternalNode=TRUE)
Run Code Online (Sandbox Code Playgroud)
我能够使用XML包中的一些函数(例如,getNodeSet),但我不是专家,并且在互联网上有一些例子,但我自己无法解决这个问题.我也知道一些XPath,但这是4年前,我不是一个关于sapply和类似功能的专家.
但我的目标是:
我需要删除一整套关于位置的XML子分支,例如:<location> ... anything </location>
.可以有多个具有位置数据的节点.我根本不需要输出中的细节.上面的XML文件始终符合XSD架构.调用根节点<clinical_study>
.
生成的简化文件应写入名为"data-changed.xml"的新XML文件中.
我还需要重命名并从旧的嵌套位置移动一个分支
<eligibility>
<criteria>
<textblock>
Inclusion criteria are xyz
</textblock/>...
在新输出("data-changed.xml")中,结构应该表示不同的XML节点并且直接位于根节点下:
<eligibility_criteria>
Inclusion criteria are xyz
</eligibility_criteria>
所以我需要:
任何想法都非常感谢?
另外,如果您了解一个关于R内部XML解析的好(最近的!)教程(或者解决它的书籍章节,请分享参考).(我读过Duncan的小插曲,这些太过于先进(太简洁)).
以CCD为例,应该使用:
一个XSD模式,并得出结论,我有一个有效的CCD。
要么
我使用其他一些(基于非模式的)方法。(除了有效的XML文档外,UML模型规则。)
有没有这样的事情ccd.xsd
?即使只是部分指导我创建有效的CCD。
这是一个基本的R问题:R具有环境概念.那它的目的是什么,我什么时候需要启动一个以及如何在它们之间切换?多个环境的优势是什么(除了查找.Rdata文件的内容之外)?
我正在学习如何使用 R 来解析 XML,并且我正在尝试使用 Hadley 的 Wickhamxml2
包来解析位于此处的TEI XML 文本文档(警告:这是一个压缩文件,我正在尝试解析的特定文件)在下面的代码中给出)。我试图了解命名空间在这个包中的工作原理(我无法理解我正在使用的特定文本的文档)。有了这个XML
包,我可以执行以下操作:
library("XML")
crisis <- xmlParse("data/Crisis130_22.2.tei.xml")
all_divs <- getNodeSet(crisis, "//def:div",
namespaces=c(def = "http://www.tei-c.org/ns/1.0"))
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何做到这一点xml2
。我要么收到inherits(x, "xml_document") is not TRUE
错误,要么收到In node_find_all(x$node, x$doc, xpath = xpath, nsMap = ns) :
Undefined namespace prefix [1219]
错误。这是我尝试过的:
library("xml2")
crisis2 <- read_xml("data/Crisis130_22.2.tei.xml")
# check to see whether TEI URL is present
xml_ns(crisis2)
all_divs2 <- xml_find_all(crisis2, "//div", xml_ns(crisis2)) # gives empty list
all_divs <- xml_find_all(crisis2, "/def:div", xml_ns(crisis2)) # undefined …
Run Code Online (Sandbox Code Playgroud)