[英]Passing variable name into sapply
这是一个玩具数据集:
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
那么为什么会这样呢? 我需要使用变量名而不是确切的列名,因为我需要将此变量名应用于每次程序运行时都会有所不同的不同列。 但是我需要它不仅适用于第一行,而且适用于每一行。
区别在于df1[col]
返回一列数据帧,而df1$ID
返回向量/因数。 使用您的代码,您需要一个向量/因数,因此您可以
使用df1[, col]
sapply(df1[, col],function(x) fetcher(x))
或双括号df1[[col]]
sapply(df1[[col]],function(x) fetcher(x))
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.