【发布时间】:2022-01-22 22:54:12
【问题描述】:
我想向使用调查包创建的survey.design 添加列,可以按以下方式完成:
library(survey)
data(api)
dclus1 <- svydesign(id = ~dnum, weights = ~pw, data = apiclus1, fpc = ~fpc)
dclus2 <- transform(dclus1,
api00_b = api00 + 1)
svymean(~ api00, design = dclus2)
#> mean SE
#> api00 644.17 23.542
svymean(~ api00_b, design = dclus2)
#> mean SE
#> api00_b 645.17 23.542
对于更复杂的任务,我需要从外部向量动态创建这些变量名。以下会产生错误,但我认为可以说明我想要实现的目标:
vars <- c("api00_a", "api00_b")
dclus2 <- transform(dclus1,
vars[[2]] = api00 + 1)
如何实现新列的动态名称?
【问题讨论】:
-
可以在创建
svydesign之前编辑数据框apiclus1吗?apiclus1[ , vars ] <- apiclus1[ , "api00" ] + 1.. 或 stackoverflow.com/a/16225175/1759499 ? -
之前无法编辑
apiclus1(因为我需要使用调查设计dclus1创建新列)。我确实尝试过使用eval()、quote()get()和assign()的组合来做到这一点,但没有成功(但也许有办法) -
lapply( c( "meals" , "ell" ) , function( w ) svymean( ~ newvar , update( dclus1 , newvar = get( w ) + 1 ) ) )怎么样?