我正在尝试创建一个函数,假设“通用”在数据库中添加行。
我的想法是该函数“识别”数据库中的数字元素并按行添加。
假设我有下图的数据:
该函数将从第二列中获取并添加 2+3+3+6+4+2+0 等等。
到目前为止我写的代码如下:
suma_renglones < - function (x) {
y = integer(nrow(x))
for (i in 1: nrow(x)) {
for (j in 1: ncol(x)) {
if (is.numeric(x[i, j])) {
y[i] = y[i] + (x[i, j])
}
}
y[i]
}
}
但是,在应用该函数时,指定用于存储总和结果的列仅显示 NULL 结果。任何帮助或指导将不胜感激。
PS:我知道其他地方已经有关于它的解决方案,如本例所示,但我的意图是制作一个“自己的”功能。
让我们看看,您说您要添加原始矩阵的一列,但您没有这样做,您只是使用 sums 创建一个向量
y
,还请记住,您的例程无法修改由参数传递的对象,因为它在外部它的“范围”可以做的是返回一个带有附加列的新矩阵,最后在原始对象上“踩”重新编写你的代码
返回
我们在做什么?
y
包含每行总和的向量x
一个新列“sum”和总和x
,因为函数无法修改原始数组,超出其“范围”在这里,我有一个使用
dplyr
和tidyr
不使用循环的解决方案,所以它应该更快:我用前两行构建了一个示例
首先,我必须“转置”数据帧,
gather
并spread
计算每列的总和,然后我必须再次转置结果并inner_join
使用原始表进行处理。最后,我所做的是更改列的名称并对select
结果进行排序,以便总和保持为最后一列。亲爱的帕特里克,
我设计的解决方案是这样的:
将它与您的代码进行比较,我认为我最终并没有做得太糟糕,对吧?但是,您的解决方案显然更清洁、更高效。我非常感谢您花时间帮助我。再次问候:)