R - 将函数逐个应用于数据框
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非常感谢您的帮助。
问题的出现原因:
问题是因为要对数据框按照某一列进行拆分,并对每个拆分后的数据框应用函数。作者最初尝试使用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更容易;)
这个方法很好...我过分关注了拆分后的数据框和结果数据框的命名。