我有许多按顺序编号的列。例如q1
, q2
,q3
等。我还有一个指示变量 ( ind
) 用于每个观察的控制或治疗状态。我想对每个问题的治疗组和对照组之间的均值差异进行一系列 t 检验。我想要一个循环,将所有测试的 p 值输出到矩阵中,而不是逐个问题地输入。
我认为问题在于我如何使用paste()
. 我认为我无法创建一个实际调用数据的对象。我认为 R 试图在文本上运行 t.test,而不是将文本连接到它要引用的数据。强文本
data <- data.frame(matrix(NA,50,8))
colnames(data) <- c("q1","q2","q3","q4","q5","q6","q7","ind")
data[,"ind"]<- c(rep(0,25),rep(1,25))
set.seed(42)
data[,"q1"] <- rnorm(50)
data[,"q2"] <- rnorm(50)
data[,"q3"] <- rnorm(50)
data[,"q4"] <- rnorm(50)
data[,"q5"] <- rnorm(50)
data[,"q6"] <- rnorm(50)
data[,"q7"] <- rnorm(50)
results <- data.frame(matrix(NA,7,2))
## Attempt One
for(i in 1:7){
results[i,1] <- i
a <- paste0("data$q",i,"[data$ind==1]")
b <- paste0("data$q",i,"[data$ind==0]")
results[i,2] <- t.test(a,b)[3]
}
####
# Error in t.test.default(a, b) : not enough 'x' observations
# In addition: Warning messages:
# 1: In mean.default(x) : argument is not numeric or logical: returning NA
# 2: In var(x) : NAs introduced by coercion
###Attempt Two
for(i in 1:7){
results[i,1] <- i
a <- get(paste0("data$q",i,"[data$ind==1]"))
b <- get(paste0("data$q",i,"[data$ind==0]"))
results[i,2] <- t.test(a,b)[3]
}
####
# Error in get(paste0("data$q", i, "[data$ind==1]")) :
# object 'data$q1[data$ind==1]' not found
我发现了很多关于如何在 R 中创建变量名的讨论paste
,但我正在寻找如何在 R 中调用变量名paste
。 1.如何分配给 R 中变量值的 names() 属性
2.如何动态命名变量?
3. 使用 for 循环访问变量,如上面“尝试二”中所尝试的:Change variable name in for loop using R