gpt4 book ai didi

r - 在 R 中创建带有两个 for 循环的矩阵/数据框

转载 作者:行者123 更新时间:2023-12-01 10:24:35 28 4
gpt4 key购买 nike

这是我关于 SO 的第一篇文章,所以请多关照!

我的问题与这个问题隐约相关: Double for loop in R creating a matrix

我想创建一个矩阵/数据框,我选择的方法是嵌套两个 for 循环,一个创建第一行,第二个为我需要的行重复它。

我可以成功创建第一个循环,但我似乎无法根据需要的行数对其进行迭代。

我确信有更好的方法可以做到这一点,无论如何,这是给出第一行所需结果的 for 循环:

x <- character(0)
for(j in 1:18){
x <- c(x, sum(it_mat[1, 2:26] == j))
}

it_mat 是一个 417 行 26 列的矩阵,其中第一列是具有各种名称的字符串向量,后续列是从 1 到 18 的随机生成的数字。

这是第一行:

[1,] "Charlie" "14" "3"  "9"  "14" "3"  "9"  "11" "11" "18"  "17"  "16"  "5"   "18"  "6"   "10"  "3"   "9"   "9"   "3"   "18"  "12"  "8"   "5"   "5"  "4"

我想创建一个矩阵/df,在其中计算每个名称、每个数字出现的次数。

我在上面创建的 for 循环为我提供了我想要的第一行结果:

x
[1] "0" "0" "4" "1" "3" "1" "0" "1" "4" "1" "2" "1" "0" "2" "0" "1" "1" "3"

我真的不能用另一个 for 循环为后续行迭代它,一定是我做错了一些非常普通的事情。

这是我最好的尝试:

tr_mat <- matrix(, nrow = 147, ncol = 18)
for(i in 1:147){
x <- character()
for(j in 1:18){
x <- c(x, sum(it_mat[i, 2:26] == j))
}
tr_mat <- rbind(tr_mat, x)
}

我整个下午都在做,现在我放弃了,联系你,在你给我正确的方法之前,请解释一下我在嵌套 for 循环尝试中做错了什么,我可能会学到一些东西.

我希望我自己解释清楚了,如果我说得太冗长,我深表歉意。感谢您的宝贵时间。

最佳答案

@RuiBarradesh 已经指出了 OP 上次尝试中的实际问题。还有另一种使用 rbind 修复 OP 代码的方法。

# Do not create rows at this place. Let the rows be added with rbind
tr_mat <- matrix(nrow = 0, ncol = 18) #(, nrow = 147, ncol = 18)
for(i in 1:147){
x <- character()
for(j in 1:18){
x <- c(x, sum(it_mat[i, 2:26] == j))
}
tr_mat <- rbind(tr_mat, x)
}

tr_mat # This will display correct result too

关于r - 在 R 中创建带有两个 for 循环的矩阵/数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48723716/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com