R - 将函数逐个应用于数据框

17 浏览
0 Comments

R - 将函数逐个应用于数据框

我有一个数据框mydf,并将其分割成了一些数据框,例如mydf$\'1\' mydf$\'2\'...mydf$\'n\'。\n我希望在这些数据框上应用我的函数,得到resultdf,例如:\n

resultdf1 <- myfunc(mydf$'1')
resultdf2 <- myfunc(mydf$'2')
.....
resultdfn <- myfunc(mydf$'n')

\n等等...由于从分割中得到了大约35个数据框,我该如何减少工作量,而不是手动为每个数据框写入名称和resultdf。\n我尝试了lapply,但结果不正确。\n非常感谢您的帮助。

0
0 Comments

问题的出现原因:

问题是因为要对数据框按照某一列进行拆分,并对每个拆分后的数据框应用函数。作者最初尝试使用split函数将数据框拆分成一个小的数据框列表,然后使用lapply函数在拆分列表上应用函数。但是这样做会返回另一个列表,其中每个节点包含函数的结果。如果想要返回一个向量,可以使用sapply函数。

问题的解决方法:

解决方法是通过split函数将数据框拆分成一个小的数据框列表,然后使用lapply函数在拆分列表上应用函数。如果想要返回一个向量,可以使用sapply函数。如果想要将拆分后的数据框合并成一个数据框,可以使用dplyr包的bind_rows函数。

文章内容如下:

调用split函数可以将一个数据框拆分成一个小的数据框列表。因此,也许只需要在这个拆分列表上调用lapply函数,例如:

mydf.split <- split(mydf, mydf$col)
list.result <- lapply(mydf.split, function(x) { /* do something */ })

上面的代码将返回另一个列表,其中每个节点包含函数的结果。如果想要返回一个向量,可以使用sapply函数。例如,如果想要获取每个拆分数据框的行数,可以使用以下代码:

mydf.counts <- sapply(mydf.split, function(x) nrow(x))

之后,可以使用dplyr包的bind_rows函数将列表中的数据框合并成一个数据框。

如果你正在使用dplyr,为什么要先拆分再合并呢?只需要使用group_by就可以了...

有时候,对我来说,将函数写成lapply在数据框列表上应用比使用group_by更容易;)

这个方法很好...我过分关注了拆分后的数据框和结果数据框的命名。

0