2013-03-26 75 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