来自 R 新手的另一个基本问题。我有一个数据集:testMeanSD。这是一些相关数据,使用 dput() - 我第一次尝试这个输出,所以我希望我做得正确:
testMeanSD <- structure(list(RT = c(1245L, 1677L, 1730L, 1066L, 994L), mean = c(1143.77777777778,
1143.77777777778, 1143.77777777778, 1143.77777777778, 1143.77777777778
), sd = c(202.255299928596, 202.255299928596, 202.255299928596,
202.255299928596, 202.255299928596), RT2 = c(1245L, 1677L, 1730L,
1066L, 994L)), .Names = c("RT", "mean", "sd", "RT2"), row.names = c(NA,
5L), class = "data.frame")
RT2 只是 RT 的副本,供我修改。对于每一行,如果满足某些条件,我需要更改 RT2 的值。否则 RT2 与 RT 保持相同(或与 RT2 中的当前值相同,这是同一件事)。以下是条件:
找到 RT2 中所有超过平均值 + 2.5 * SD 的值,并将它们修剪为等于平均值 + 2.5 * SD
如果 (RT2 > 平均值 + (2.5 * SD)) RT2 = 平均值 + 2.5 * SD
找到所有小于平均值 - 2.5 倍 SD 的值并将它们修剪为等于平均值 - 2.5 * SD
否则,如果 (RT2 < 平均值 - (2.5 * SD)) RT2 = 平均值 - 2.5 * SD
其他一切保持原样
否则
RT2 = RT
我认为这在 R 中是相当基本的,但我根本找不到让它工作的方法。这是我的一些尝试(都失败了):
第一的:
testMeanSD$RT2 = testMeanSD$RT
if (testMeanSD$RT2 > (testMeanSD$mean + (2.5 * testMeanSD$sd))) {
testMeanSD$RT2 = (testMeanSD$mean + (2.5 * testMeanSD$sd))
}
else if(testMeanSD$RT2 < (testMeanSD$mean - (2.5 * testMeanSD$sd))) {
testMeanSD$RT2 = (testMeanSD$mean - (2.5 * testMeanSD$sd))
}
else {
testMeanSD$RT2 = testMeanSD$RT
}
第二:
ifelse(testMeanSD$RT2 > (testMeanSD$mean + (2.5 * testMeanSD$SD)), testMeanSD$RT2 <- (testMeanSD$mean + (2.5 * testMeanSD$sd)),
ifelse(testMeanSD$RT2 < (testMeanSD$Mean - (2.5 * testMeanSD$sd)), testMeanSD$RT2 <- (testMeanSD$mean - (2.5 * testMeanSD$sd)), testMeanSD$RT2 <- testMeanSD$RT)
第三:
testMeanSD$RT2 <- ifelse(testMeanSD$RT2 > (testMeanSD$mean + (2.5 * testMeanSD$sd)), testMeanSD$mean + (2.5 * testMeanSD$sd)),
ifelse(testMeanSD$RT2 < (testMeanSD$mean - (2.5 * testMeanSD$SD)), (testMeanSD$mean - (2.5 * testMeanSD$sd)), testMeanSD$RT2 <- testMeanSD$RT)
我浏览了一些相关的帖子,这个似乎最接近:Loop over rows of dataframe apply function with if-statement
但我不清楚如何将 if then 纳入那里概述的方法(如果不是我上面的方法)。
任何帮助将不胜感激。谢谢!