我有这个数据框t1
id nobs
1 1 221
2 2 222
3 3 223
4 4 224
5 5 225
6 6 226
7 7 227
8 8 228
9 9 229
10 10 230
Run Code Online (Sandbox Code Playgroud)
并且我想设置例如225的阈值以仅从6-10中选择id.这是我做的,我用了一个for循环:
> t2 <- for (i in 1:length(t1[,"nobs"]))
{
a <- print({if(t1[, "nobs"][i] > threshold){TRUE}else{FALSE}})
}
Run Code Online (Sandbox Code Playgroud)
它返回
[1] FALSE
[1] FALSE
[1] FALSE
[1] FALSE
[1] FALSE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
[1] TRUE
> t2
NULL
Run Code Online (Sandbox Code Playgroud)
我在这里不明白,我期望与10个逻辑相同.
我想将t2分配给t2的逻辑向量.我怎样才能做到这一点?为什么[]中的数字都是1而不是1到10.非常感谢你.
print(t1$nobs>225)
# [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
R是一种矢量化语言,意味着几乎所有函数(print(...)例如)都在向量上运行.你应该(几乎)永远不必循环遍历R中的循环.
t1$nobs>225具有与t1(10)中的行相同数量的元素的向量也是如此,并且每个元素是逻辑比较的结果.print(t1$nobs>225)只是打印矢量.
回应OP的评论:
t2 <- t1$nobs>25
Run Code Online (Sandbox Code Playgroud)
将创建一个t2长度相同的向量,t1并将其设置为TRUEif t1$nobs>225和FALSEother.