调用在dplyr管道中创建的变量- R [duplicate]

s5a0g9ez  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(91)

此问题已在此处有答案

Alternative to the c() function that works with pipes in R?(3个答案)
2天前关闭。

可重现数据:

'# Truncated Exponential Dist's
lambda_1 <- 1/2
lambda_2 <- 1/10
ff1 <- function(x) pexp(x, lambda_1)
f1.inv <- function(q) qexp(q, lambda_1)
ff2 <- function(x) pexp(x, lambda_2)
f2.inv <- function(q) qexp(q, lambda_2)
a <- 0
n <- 50
x1 <- f1.inv(runif(n))
x1.trunc <- f1.inv(runif(n, ff1(a)))
x2 <- f2.inv(runif(n))
x2.trunc <- f2.inv(runif(n, ff2(a)))
T_Phone <- c(x1.trunc,x2.trunc)
#Normal Data - Equal Variances
Normal_1_Eq <- rnorm(n = 50, mean = 24.6, sd = .95)
Normal_2_Eq <- rnorm(n = 50, mean = 38, sd = 1.05)
Weight <- c(Normal_1_Eq,Normal_2_Eq)

#Normal Data - Unequal Variances
Normal_1_Uneq <- rnorm(n = 50, mean = 24.6, sd = .23)
Normal_2_Uneq <- rnorm(n = 50, mean = 38, sd = 2.95)
Head_Circumference <- c(Normal_1_Uneq, Normal_2_Uneq)
#Poisson
Poisson_1 <- rpois(n = 50, lambda = 4.5)
Poisson_2 <- rpois(n = 50, lambda = 14.5)
Daily_Snacks <- c(Poisson_1,Poisson_2)
#Assign Groups
Group <- rep(c("A","B"), each = 50)
ID <- rep(c(1:50), each = 1, times = 2)
#Group <- sample(Group)

#Set Into Dataframe
df <- data.frame(ID,Group, Weight,Head_Circumference,Daily_Snacks,T_Phone)
df[,c(1:2)] <- lapply(df[,c(1:2)], as.factor)
df[,c(3:6)] <- lapply(df[,c(3:6)], as.numeric)
df <- df %>% janitor::clean_names()`

问题我尝试使用上面的长数据格式,只在dplyr管道链中需要时将其重塑为宽格式。我已经成功地做到了这一点与以下(只适用于可变的“重量”)

df %>% select(id,group, weight) %>% spread(key = "group", value = "weight")

现在,我想调用新变量A和B,并检验它们之间的方差齐性:

df %>% select(id,group, weight) %>% spread(key = "group", value = "weight") %>% var.test(.$A,.$B)

但是,在使用最后一个命令(var.test(.$))时,我可以访问的变量只有df中最初选择的变量(例如id和group)
如果我将其保存到一个新的 Dataframe :
t_frame <- df %>% select(id,group, weight) %>% spread(key = "group", value = "weight") var.test(t_frame$A,t_frame$B)
然后一切正常我怎样才能让新创建的A和B变量填充到管道中的var.test中呢?

hkmswyz6

hkmswyz61#

将最后一个管道替换为:

%>% {var.test(.$A, .$B)}

如果没有{},代码将整个 Dataframe 作为第一个参数传递。大括号将其取消,允许您仅选择具有$的子集。

相关问题