Возможно, что-то вроде этого?
library(XML)
tg<-xmlToDataFrame("http://www.xmldatasets.net/temp/179681356453762.xml")
mt<-data.frame(fname=cbind(apply(tg[,2:3],1,function(x) paste0(x,collapse=", "))),state=tg$state)
mt[mt$state=="TX",]
fname state
28 Cornyn, John TX
43 Hutchison, Kay Bailey TX
Как прокомментировал ниже, если вы не хотите, чтобы свернуть фамилию и имя в одной колонке вы могли бы просто взять преобразованный XML-таблицу, tg
и тип:
tg[tg$state=="TX",]
Чтобы получить всю информацию о сенаторах в Техасе. А если вам нужно только имя и состояние можно Подмножество как:
tg[tg$state=="TX",c(2:3,5)]
Если вы хотите, чтобы иметь возможность ввести имя состояния в консоли и получить имя и заявляет:
for (j in unique(tg$state)){
assign(j,tg[tg$state==j,c(2,3,5)])
}
И затем введите название состояния, например MT
и получить выход:
> MT
last_name first_name state
5 Baucus Max MT
89 Tester Jon MT
И вы также можете сделать функцию этого:
senatorName<-function (x) tg[which(tg$state==paste0(x)),c(2:3,5)];
> senatorName("TX")
last_name first_name state
28 Cornyn John TX
43 Hutchison Kay Bailey TX
XML - это боль, но [Фонд Sunlight публикует ту же информацию, что и CSV] (https://sunlightlabs.github.io/congress/#legislator-spreadsheet) (или API, если хотите).Вы можете захватить его непосредственно с помощью только 'congress <- read.csv ('http://unitedstates.sunlightfoundation.com/legislators/legislators.csv')', а затем подмножество обычно, например. 'congress [congress $ title == 'Sen' & congress $ state == 'CA', 1: 5]' – alistaire