【发布时间】:2018-02-11 02:55:43
【问题描述】:
这是我关于 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 循环中做错了什么尝试,我可能会学到一些东西.
我希望我解释了自己,如果我太冗长了,抱歉。 感谢您的宝贵时间。
【问题讨论】:
-
对于那些投票关闭的人,您能否发表评论说明 OP 可以做些什么来改进。这是第一次发布海报,重要的是我们教导人们期望的行为,而不是完全阻止在 SO 上发帖。
-
做
tr_mat[i, ] <- x,而不是tr_mat <- rbind(tr_mat, x)。 (您正在绑定一个包含 147 个新行的NAvalues 矩阵。) -
你能包含一个简短的 'it_mat' 的 sn-p 吗?在循环之前?
-
OP 在发布他的问题之前已经尽了最大的努力并付出了足够的努力。我们必须鼓励这样的新加入者!!
-
我对 OP 的建议是让代码完全可重现会很棒。 OP 提供了很好的详细代码和一些所需的输出,但不清楚
it_mat是什么。这就是我投票关闭这篇文章的原因。如果 OP 可以提供it_mat的可重现示例,我将撤回我的投票并给这篇文章投上一票。
标签: r data-structures