1

我有以下形式的数据框:

      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>

在hitid 列中,我想自动填写我之前运行过的循环的结果。结果以 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 提取到现有的 datfile 中。

4

2 回答 2

0

这里有一个plyr解决方案。

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

我假设:

d <- list(Switzerland=list(hitid=1),
          Sweden=list(hitid=2))
于 2013-03-26T15:42:50.807 回答
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
于 2013-03-26T15:38:30.133 回答