编辑
这个问题最初是问的data.table
。任何包的解决方案都会很有趣。
我对一个更普遍的问题的特定变体有点困惑。我有与 data.table 一起使用的面板数据,我想使用 data.table 的功能分组来填充一些缺失值。不幸的是,它们不是数字,所以我不能简单地进行插值,但它们只能根据条件进行填充。是否可以在 data.tables 中执行一种条件 na.locf?
本质上,如果在 NA 之后下一个观察是之前的观察,我只想填充 NA,尽管更普遍的问题是如何有条件地填充 NA。
例如,在下面的数据中,我想按每个 id 组填充相关的 id 变量。因此id==1
,year==2003
将填写为ABC123
因为它是 NA 之前和之后的值,但对于相同的 id 则不是 2000。id== 2
不会更改,因为下一个值与 NA 之前的值不同。id==3
将填写 2003 年和 2004 年。
mydf <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), year = c(2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, …
Run Code Online (Sandbox Code Playgroud) 我试图从交互式aspx网页webscrape表.我已经阅读了所有关于堆栈的R webscraping问题,我想我已经接近了,但我似乎无法得到它.
我想从这里生成的表中提取数据.最终我想循环遍历每个日期和状态选项,但我的挑战实际上只是到R提交我的参数并为任何特定查询拉入结果表.
根据我收集的内容,答案可能涉及RCurl和XML包,使用我的参数发布"表单",然后读取结果页面的html.
我最近的努力看起来像这样:
library(RCurl)
library(XML)
curl = getCurlHandle()
link = "http://indiawater.gov.in/IMISReports/Reports/WaterQuality/rpt_WQM_HabitationWiseLabTesting_S.aspx"
html = getURL(link, curl = curl)
params = list('ctl00$ContentPlaceHolder$ddFinYear' = '2005-2006',
'ctl00$ContentPlaceHolder$ddState' = 'BIHAR')
html2 = postForm(link, .params = params, curl = curl)
table = readHTMLTable(html2 )
Run Code Online (Sandbox Code Playgroud)
我真的很难说我遇到了什么问题.一方面html == html2产生错误,所以我认为html2在提交表单后已经进展到某个点,但是如果表单提交不正确或者如果有效并且它的读数是那张桌子没用.
任何建议和帮助表示赞赏.谢谢!
我有一个非常庞大和复杂的数据集,有很多公司的观察结果.这些公司的一些观察是多余的,我需要做出一个关键,将冗余的观察结果映射到一个单独的观察.然而,判断他们是否实际代表同一家公司的唯一方法是通过各种变量的相似性.我认为适当的方法是基于各种条件或甚至某种倾向得分匹配的一种聚类.也许我只需要灵活的工具来制作复杂的相似性矩阵.
不幸的是,我不太确定如何在R中进行此操作.我看到的用于聚类和分类的大多数工具似乎都使用数字距离或分类数据,但似乎不允许多个条件或用户指定条件.
下面我试图创建一个较小的公开示例,说明我正在使用的数据类型以及我尝试生成的结果.有些条件必须适用,例如,位置必须相同.有些功能可能会将一个功能与另一个功能相关联,例如var1和var2.然后有一些功能可以将一个与另一个相关联,但它们不能冲突,例如var3.
另一层复杂性是我试图用来映射冗余观察的关联类型各不相同.例如,id1和id2是两次冗余输入数据的同一公司.在一个地方它的名字是"苹果"和另一个"红苹果".它们共享相同的位置,var1值和var3(在调整格式之后).类似地,ids 3,5和6也实际上只是一家公司,尽管每种公司的大部分输入都是不同的.一些集群将识别多个观察,而其他集群将只有一个观察.理想情况下,我想找到一种方法来根据几个条件对观察结果进行分类或关联,例如:1.测试位置是否相同2.测试var3是否不同3.测试名称是否是其他的子串4 .测试名称的编辑距离5.测试观察之间var1和var2的相似性
无论如何,希望有更好,更灵活的工具,而不是我发现或有人在R中的这种数据工作的经验.任何和所有的建议和建议非常感谢!
数据
id name location var1 var2 var3
1 apples US 1 abc 12345
2 red apples US 1 NA 12-345
3 green apples Mexico 2 def 235-92
4 bananas Brazil 2 abc NA
5 oranges Mexico 2 NA 23592
6 green apple Mexico NA def NA
7 tangerines Honduras NA abc 3498
8 mango Honduras 1 NA NA
9 strawberries Honduras NA abcd 3498
10 strawberry Honduras NA abc 3498
11 blueberry Brazil …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种使用data.table的fread和rbindlist函数快速读取和合并一堆数据文件的方法.我认为如果fread可以将文件名称的矢量作为参数,它可以是一个优雅的线条
mergeddata = rbindlist(fread(list.files("my/data/directory/")))
Run Code Online (Sandbox Code Playgroud)
但由于这似乎不是一个选项,我采用了更为尴尬的方法来循环读取文件并将它们分配给临时名称,然后将创建的临时数据表名称列表放在一起.但是,每当我尝试调用data.table名称列表时,我都会被绊倒.所以我的问题是(1)如何在这种情况下将数据表名称列表传递给rbindlist,(2)更广泛地说是否有更好的方法解决这个问题?
提前感谢您的时间和帮助!
datafiles = list.files()
datatablelist = c()
for(i in 1:length(datafiles)){
assign(paste("dt",i,sep=""),fread(datafiles[1]))
datatablelist = append(datatablelist ,paste("dt",i,sep=""))
}
mergeddata = rbindlist(list(datatablelist))
Run Code Online (Sandbox Code Playgroud) 我正在尝试将 XML 文件中的一些数据下载并组织到 R 中。我查看了相关问题和文档,但大多数是指使用 xml 包解析函数,这些函数似乎无法找出我的数据。所以我的两个问题是 1) 如何让 R 将实际数据读入数据帧而不是 XML 结构并进行标记?和 2) 我可以在 XML 代码中使用 XML 结构信息在 R 中解析它吗?
这就是我正在使用的(以及迄今为止我失败的尝试):
library("XML")
datahere = c("C:/.../R/feddata/data/")
setwd(datahere)
download.file("http://www.newyorkfed.org/markets/pomo/xml/v3_0/pomoXML.cfm?SHOWMORE=TRUE&date1=01/01/2009&date2=01/10/2009",paste(datahere,"feddata.xml",sep=""))
feddata = xmlInternalTreeParse("feddata.xml")
feddataset = xmlRoot(feddata)
names(feddata)
feddatanodeset = getNodeSet(feddata,"//DataSet/*")
feddatalist = xmlToList("feddata.xml")
feddatalist[2][1][1]
feddataDF = xmlToDataFrame(feddata)
feddata$doc$file$DataSet
feddata["doc"]["file"]["DataSet"]
feddataRoot = xmlRoot(feddata)
feddata2 = xmlSApply(feddata, function(x) xmlSApply(x,xmlValue))
feddata2 = xmlSApply(feddata$DataSet, function(x) xmlSApply(x,xmlValue))
Run Code Online (Sandbox Code Playgroud)
非常感谢您的想法、建议、意见等。如果您知道我可以使用的其他堆栈问题或教程或示例,那也可以使用,不要多余。谢谢!