2013-03-26 53 views
1

我有以下形式的数据帧:在hitid collumn式中的R的名称字符串

 country company hitid 
1 Switzerland  CH1 <NA> 
2 Switzerland  CH2 <NA> 
3 Switzerland  CH3 <NA> 
4  Sweden  SU1 <NA> 
5  Sweden  SU2 <NA> 
6  Sweden  SU3 <NA> 

,我想填写自动我以前也运行一个循环的结果。结果在形式d $ COUNTRY $ hitid,其中每个国家,我有另一个hitid,我想,以填补在给定的

编辑: 我的循环输出如下形式:

$Switzerland 
    HITTypeId  HITId   Valid 
1 1010    123   TRUE 

$Sweden 
    HITTypeId  HITId  Valid 
1 1010   456   TRUE 

有什么方法可以使用名称字符串中的公式吗?我可以构建这样的:

hitid=d$"formula to look up country"$hitid 

或者任何想法如何构建这个问题更优雅?

基本上我只是想提取每个国家的HITId出循环和现有的数据文件。

+0

我不认为你正在做正确的方式,但很难不能够看到你所说的“一个循环我的结果说已经跑过“。你可以复制/粘贴你的问题,也许提供所需的最终输出? – juba 2013-03-26 15:26:05

+0

很难说出你想做什么,但总的来说'[['比'$'更灵活。看看'?“[”'给你任何想法。 – Ista 2013-03-26 15:28:01

+0

将您的循环结果的示例发布到问题的代码块中。像str(myloopresults)这样的东西将会非常有用 – 2013-03-26 15:50:03

回答

0

这里是一个plyr解决方案。

library(plyr) 
ddply(dat,.(country),transform, 
       hitid= d[[unique(country)]]$hitid) 

如果我假设:

d <- list(Switzerland=list(hitid=1), 
      Sweden=list(hitid=2)) 
0

这对您的数据做了一些假设,即DF$country是一个字符列,而d是一个列表。

DF <- read.table(text="  country company hitid 
1 Switzerland  CH1 <NA> 
2 Switzerland  CH2 <NA> 
3 Switzerland  CH3 <NA> 
4  Sweden  SU1 <NA> 
5  Sweden  SU2 <NA> 
6  Sweden  SU3 <NA>",header=TRUE,stringsAsFactors=FALSE) 

d <- list(Switzerland=list(hitid=123),Sweden=list(hitid=456)) 

fun <- function(x) d[[x]][["hitid"]] 
DF$hitid <- sapply(DF$country,fun) 

#  country company hitid 
# 1 Switzerland  CH1 123 
# 2 Switzerland  CH2 123 
# 3 Switzerland  CH3 123 
# 4  Sweden  SU1 456 
# 5  Sweden  SU2 456 
# 6  Sweden  SU3 456