R - 使用 with() 从数据帧创建新变量

标签 r

我了解到应该避免使用 attach。并改为使用 with() 。 然而,有时这似乎并不是所有情况下的解决方案。

我需要创建几个新变量(矩阵),这些变量是根据 data.frame 中的一个相同值计算的:

df1 <- data.frame(Var1=rnorm(50,5), Var2=rnorm(50,12))

q5 <- quantile(df1$Var1,.05, na.rm=TRUE)# lower quantile
q95 <- quantile(df1$Var1,.95, na.rm=TRUE) # upper quantile
medx <- median(df1$Var1, na.rm=TRUE) # median
x.dens <- density(df1$Var1, na.rm=TRUE) # density

我想避免繁琐/冗余地使用“data.frame$”

但这不起作用:

with(df1, 
q5 <- quantile(Var1,.05, na.rm=TRUE),# lower quantile
q95 <- quantile(Var1,.95, na.rm=TRUE), # upper quantile
medx <- median(Var1, na.rm=TRUE), # median
x.dens <- density(df1$Var1, na.rm=TRUE)) # density

确实是重复相同的操作,相同的设置,但功能不同。

你知道如何克服代码的复杂使用吗

最佳答案

在数据框环境中创建变量时,请使用 within() 而不是 with

res <- within(df1, 
              q5 <- quantile(Var1,.05, na.rm=TRUE),# lower quantile
              q95 <- quantile(Var1,.95, na.rm=TRUE), # upper quantile
              medx <- median(Var1, na.rm=TRUE), # median
              x.dens <- density(df1$Var1, na.rm=TRUE)) # density

head( res)
#      Var1     Var2       q5
# 1 4.943871 12.29145 3.678482
# 2 4.844204 11.55671 3.678482
# 3 3.529248 12.00111 3.678482
# 4 4.521850 12.07434 3.678482
# 5 5.417942 11.41048 3.678482
# 6 6.358680 11.43133 3.678482

关于R - 使用 with() 从数据帧创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42884279/

相关文章:

R/苹果问题: error in table() : all arguments must have the same length

R ggiraph with ggmap for interactive/reactive longitude and latitude points - scale or axis issue?

r - 如何为数据表中的每个因素选择前 n 行?

r - 如何在 R 中交换固定字符串和顺序字符串?

r - units::set_units() 不会从变量中识别单位

r - 一个r项目的文件和目录结构

r - 在多个列上嵌套 if else 语句

r - 在 Shiny 的应用程序中显示 ggplot 时,如何捕获控制台中出现的 ggplot 警告并显示在应用程序中?

删除 R 条形图中刻度线的空间或减小标签的行高

r - 按行提取非缺失元素并堆叠