[英]Using an apply function to subset, match, and correlate multiple sets of variables in R
我想使用一個apply函數來緊湊地將變量集與以下字符串進行子集,匹配和關聯:“ hpi”,“ cpi”,“ eh”。
具體來說,我想將以下第三個注釋(僅適用於“ hip”)下面的所有行應用於其他每個字符串。
你能給些建議么?
MWE:
#Dataset 1
alias <- paste("v", seq( from = 1, to = 25 ), sep="" )
df1 = data.frame(replicate(25,sample(0:100,1000,rep=TRUE)))
colnames(df1) = alias
#Dataset 2
df2 = data.frame(replicate(3,sample(0:1,25,rep=TRUE)))
colnames(df2) = c("hpi","cpi","eh")
df2$alias = alias
df2$name = rep ( c("hpi housig", "cpi inflation", "eh econhealth", "unem unemployment", "inc personal income"), 5)
#I would like to use an apply function to do this to each of "hpi", "cpi", "eh"
df2$hpi = grepl("hpi", df2$name)
hpisub = df2[df2$hpi == 1, ]
hpisubvar = hpisub$alias
hpidf = df1[, hpisubvar]
corrhpi = cor(hpidf)
*apply
函數將函數FUN
應用於其第一個參數,因此您需要編寫一個要應用的函數。
fun <- function(x){
dfsub = df2[grepl(x, df2$name), ]
cor(df1[, dfsub$alias])
}
現在,我們對您的結果進行測試, corrhpi
。
identical(corrhpi, fun("hpi"))
[1] TRUE
最后,將其應用於所需的向量。
vec <- c("hpi", "cpi", "eh")
result <- lapply(vec, fun)
names(result) <- vec
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.