For循环并将结果存储在R中的数组中
For-loop and storing results in an array in R
假设我有一个由一个变量 (x) 组成的数据框
df <- data.frame(x=c(1,2,3,3,5,6,7,8,9,9,4,4))
我想知道有多少个数字小于 2,3,4,5,6,7。
我知道如何使用
手动执行此操作
# This will tell you how many numbers in df less than 4
xnew <- length(df[ which(df$x < 4), ])
我的问题是如何使用 for 循环或其他方法自动执行此操作?我需要将结果存储在一个数组中,如下所示
i length
2 1
3 2
4 4
5 6
6 7
7 8
谢谢
一种方法是遍历 (sapply
) 数字 (2:7
),检查 df$x
中的哪些元素小于 (<
) "number" 并用数字执行 sum
、cbind
,将给出 matrix
输出
res <- cbind(i=2:7, length=sapply(2:7, function(y) sum(df$x <y)))
或者您可以通过创建 matrix
个数字 (2:7
) 进行矢量化,每个数字都按 df
的行数进行复制,执行逻辑运算 <
和 df$x
。对矩阵的每一列重复逻辑运算,并使用 colSums
获得列总和。
length <- colSums(df$x <matrix(2:7, nrow=nrow(df), ncol=6, byrow=TRUE))
#or
#length <- colSums(df$x < `dim<-`(rep(2:7,each=nrow(df)),c(12,6)))
cbind(i=2:7, length=length)
num = c(2,3,4,5,6,7)
res = sapply(num, function(u) length(df$x[df$x < u]))
data.frame(number=num,
numberBelow=res)
矢量化解决方案:
findInterval(2:7*(1-.Machine$double.eps),sort(df$x))
.Machine$double.eps
部分确保您只取小于且不小于或等于的数字。
假设我有一个由一个变量 (x) 组成的数据框
df <- data.frame(x=c(1,2,3,3,5,6,7,8,9,9,4,4))
我想知道有多少个数字小于 2,3,4,5,6,7。 我知道如何使用
手动执行此操作# This will tell you how many numbers in df less than 4
xnew <- length(df[ which(df$x < 4), ])
我的问题是如何使用 for 循环或其他方法自动执行此操作?我需要将结果存储在一个数组中,如下所示
i length
2 1
3 2
4 4
5 6
6 7
7 8
谢谢
一种方法是遍历 (sapply
) 数字 (2:7
),检查 df$x
中的哪些元素小于 (<
) "number" 并用数字执行 sum
、cbind
,将给出 matrix
输出
res <- cbind(i=2:7, length=sapply(2:7, function(y) sum(df$x <y)))
或者您可以通过创建 matrix
个数字 (2:7
) 进行矢量化,每个数字都按 df
的行数进行复制,执行逻辑运算 <
和 df$x
。对矩阵的每一列重复逻辑运算,并使用 colSums
获得列总和。
length <- colSums(df$x <matrix(2:7, nrow=nrow(df), ncol=6, byrow=TRUE))
#or
#length <- colSums(df$x < `dim<-`(rep(2:7,each=nrow(df)),c(12,6)))
cbind(i=2:7, length=length)
num = c(2,3,4,5,6,7)
res = sapply(num, function(u) length(df$x[df$x < u]))
data.frame(number=num,
numberBelow=res)
矢量化解决方案:
findInterval(2:7*(1-.Machine$double.eps),sort(df$x))
.Machine$double.eps
部分确保您只取小于且不小于或等于的数字。