我们用这个mtcars来说明一下情况。
我想要做的与下面的多列相同。qsec获得一列(在示例中)相对于具有特定值(4 和 6,在下面的示例中)的另一列的平均值。我稍后会比较结果,所以也许我会将结果存储在向量中
table(mtcars$cyl)
4 6 8
11 7 14
mean(mtcars$qsec[mtcars$cyl == 4], na.rm = T)
mean(mtcars$qsec[mtcars$gear == 4], na.rm = T)
Run Code Online (Sandbox Code Playgroud)
我想检查qsec关于的方法cyl,让我们说gear和carb,对于均值具有相同的“模式”,即观察值的平均值为 4 和观察值的平均值为 6。在真实的数据集中,将有几列具有相同的集合数字(2、0 和 1)。我将比较列的均值(在示例中qsec)与观测值 2 和 0。
我尝试查看诸如tapply, apply,之类的函数sapply。但我坚持将条件平均应用于每一列(一次)。
希望我说清楚了。谢谢你!
我有这些数据和我创建的for,用于根据条件(if)转换列中的所有元素。(我知道还有更多方法可以做到这一点......)
这里是:
S1 <- c(0,1,1,0,0,2,2,1,1,1,1,1,0)
S2 <- c(2,1,0,1,0,2,1,1,0,1,2,2,1)
S3 <- c(0,1,0,0,1,2,0,1,2,1,2,0,2)
S4 <- c(2,1,0,2,1,2,2,1,2,1,2,2,0)
df <- data.frame(S1,S2,S3,S4)
for (i in 1:nrow(df)){
if(df[i,1] == 0){
df[i,1] <- "A/A"
}
if(df[i,1] == 1){
df[i,1] <- "A/T"
}
if(df[i,1] == 2){
df[i,1] <- "T/T"
}
if(df[i,1] == "NaN"){
df[i,1] <- 0
}
}
Run Code Online (Sandbox Code Playgroud)
这是实际情况:
S1 S2 S3 S4
0 2 0 2
1 1 1 1
1 0 0 0
Run Code Online (Sandbox Code Playgroud)
当我运行for时,它仅适用于第一列,因为我描述了df[i,1]. 问题是,如何同时对所有列执行此操作?我有办法解决这个问题吗?
谢谢