【发布时间】:2014-01-19 10:43:25
【问题描述】:
这是一个玩具数据集:
df1 <-data.frame(c("267119002","257051033",NA,"267098003","267099020","267047006"))
names(df1)[1]<-"ID"
df2 <-data.frame(c("257051033","267098003","267119002","267047006","267099020"))
names(df2)[1]<-"ID"
df2$vals <-c(11,22,33,44,55)
和玩具代码:
fetcher <-function(x){
y <- df2$vals[which(match(df2$ID,x)==TRUE)]
return(y)
}
sapply(df1$ID,function(x) fetcher(x))
在sapply 语句中,我需要使用变量名,而不是使用df1$ID。如:
col <-"ID"
sapply(df1[col],function(x) fetcher(x))
但是,当我这样做时,它不会遍历 df1$ID 的所有值。这样它只对第一个值执行sapply。示例输出:
> sapply(df1[col],function(x) fetcher(x))
ID
33
> sapply(df1$ID,function(x) fetcher(x))
[1] 33 11 22 55 44
那么为什么会这样呢?我需要使用变量名而不是确切的列名,因为我需要将其应用于每次程序运行时都会发生变化的不同列。但我需要它应用于每一行,而不仅仅是第一行。
【问题讨论】: