我有一个带数值的矢量。
tstat
[1] -1.1210000 3.5833333 1.3142857 -0.1923077 -3.0300000 -0.2000000 -6.1200000 -3.9100000 -3.6103448
[10] 0.1352113 -0.4159624 -0.4961656 1.0370899 0.9312866 0.4525845 -0.2533333 0.3772894 0.8944724
[19] 0.6288688 -1.0187899 -1.7015306 -5.3750000 -2.7166667 -0.5000000 -0.1750000 0.7500000 -1.9230769
[28] 1.6400000 -8.3300000 -0.5800000 -8.2100000 -29.1019284 -18.7434211 -10.2397004 4.4171734 -1.9033108
[37] 4.4171734 0.7322762 -2.3500000 -5.5100000 -0.6855346 0.7477273 -0.7500000 -3.0400000 -2.1900000
[46] 0.2000000 1.1650469 -1.7006965 4.4171734 4.4171734 -0.7977768 4.4171734 0.0009231 4.7000000
[55] -3.8600000 2.9300000 4.4500000 -6.2400000 -4.6000000 -2.1200000 -5.0200000 -4.6700000 -5.8700000
[64] -5.1200000 -2.1800000 3.0000000 3.2000000 3.4900000 3.7300000 -2.8900000 -4.3500000 -0.3400000
[73] -0.1800000 -0.5400000 -2.3500000 -0.5700000 -1.8000000 -5.4100000 -7.7562386 2.7343035 -7.3204276
[82] 7.0203388 -4.4171734 -4.4171734 2.6200000 2.0900000 -4.3500000 3.4400000 2.2000000 -4.3100000
[91] -2.2300000 -2.7600000 -12.9000000 -4.0000000 0.2200000 -8.0540000
我想:
if vector tstat has value > 1.282, then write YES in new vector B
if vector tstat has value < -1.282, then write NO in new vector B
if vector tstat has value between -1.282 and 1.282, then write NA in new vector B
我正在尝试match
,但我可以使用&lt; { &GT;迹象。我怎么能这样做?
感谢您的帮助!
答案 0 :(得分:3)
你可以做一个嵌套的ifelse()
set.seed(2)
(A <- sample(-70:70, 10))
# [1] -44 28 9 -47 59 58 -53 41 -8 2
ifelse(A > 32, "YES", ifelse(A < -32, "NO", NA))
# [1] "NO" NA NA "NO" "YES" "YES" "NO" "YES" NA NA
答案 1 :(得分:2)
这是一种替代方法,没有ifelse()
。我认为这应该更快。
set.seed(2)
A <- sample(-70:70,10)
B <- vector()
B[A > 32] <- "YES"
B[A < -32] <- "NO"
#[1] "NO" NA NA "NO" "YES" "YES" "NO" "YES" NA NA
根据您编辑的帖子的数据,这将是:
B <- vector()
B[tsat > 1.282] <- "YES"
B[tsat < -1.282] <- "NO"
> B
# [1] NA "YES" "YES" NA "NO" NA "NO" "NO" "NO" NA NA NA NA NA NA NA NA NA NA NA "NO" "NO"
#[23] "NO" NA NA NA "NO" "YES" "NO" NA "NO" "NO" "NO" "NO" "YES" "NO" "YES" NA "NO" "NO" NA NA NA "NO"
#[45] "NO" NA NA "NO" "YES" "YES" NA "YES" NA "YES" "NO" "YES" "YES" "NO" "NO" "NO" "NO" "NO" "NO" "NO" "NO" "YES"
#[67] "YES" "YES" "YES" "NO" "NO" NA NA NA "NO" NA "NO" "NO" "NO" "YES" "NO" "YES" "NO" "NO" "YES" "YES" "NO" "YES"
#[89] "YES" "NO" "NO" "NO" "NO" "NO" NA "NO"
数据
tsat <- c( -1.1210000, 3.5833333, 1.3142857, -0.1923077, -3.0300000, -0.2000000, -6.1200000, -3.9100000, -3.6103448,
0.1352113, -0.4159624, -0.4961656, 1.0370899, 0.9312866, 0.4525845, -0.2533333, 0.3772894, 0.8944724,
0.6288688, -1.0187899, -1.7015306, -5.3750000, -2.7166667, -0.5000000, -0.1750000, 0.7500000, -1.9230769,
1.6400000, -8.3300000, -0.5800000, -8.2100000, -29.1019284, -18.7434211, -10.2397004, 4.4171734, -1.9033108,
4.4171734, 0.7322762, -2.3500000, -5.5100000, -0.6855346, 0.7477273, -0.7500000, -3.0400000, -2.1900000,
0.2000000, 1.1650469, -1.7006965, 4.4171734, 4.4171734, -0.7977768, 4.4171734, 0.0009231, 4.7000000,
-3.8600000, 2.9300000, 4.4500000, -6.2400000, -4.6000000, -2.1200000, -5.0200000, -4.6700000, -5.8700000,
-5.1200000, -2.1800000, 3.0000000, 3.2000000, 3.4900000, 3.7300000, -2.8900000, -4.3500000, -0.3400000,
-0.1800000, -0.5400000, -2.3500000, -0.5700000, -1.8000000, -5.4100000, -7.7562386, 2.7343035, -7.3204276,
7.0203388, -4.4171734, -4.4171734, 2.6200000, 2.0900000, -4.3500000, 3.4400000, 2.2000000, -4.3100000,
-2.2300000, -2.7600000, -12.9000000, -4.0000000, 0.2200000, -8.0540000)
答案 2 :(得分:2)
另一个内容:使用cut
来分组数据,然后将其插入查找表:
B <- c("NO", NA, "YES")[cut(tstat, c(-Inf, -1.28, 1.28, Inf), labels=FALSE)]
编辑:实际上,使用findInterval
,它更快更容易阅读:
B <- c("NO", NA, "YES")[findInterval(tstat, c(-Inf, -1.28, 1.28, Inf))]