关于 r:Multiple data.frame subgroups 处理 | 珊瑚贝

Multiple data.frame subgroups processing


我需要处理三个包含按名称索引的相同子组的数据帧。也就是说,第一个数据帧 df1 看起来像这样:

1
2
3
4
5
Name      col1        col2
Car       94.56       1
Car       52.67       2
Bike      421.5       2
Bike      34.56       4

df2 和 df3 具有相同的 Name 列,具有相同的值,只是不同的列。我需要为每个不同的名称处理 3 个数据框中的所有行。到目前为止,我一直在使用这种方法:

1
2
3
4
5
6
7
results = data.frame(name = factor(“dummy”), col1 = 1, col2 = 2)
for( name in df1$Name ) {
  new.results = process(name, df1[df1$Name == name, ], df2[df2$Name == name, ], df3[df3$Name == name, ]
  results = rbind(results, new.results)
}

return(results)

这里 process() 返回另一个数据帧,其中包含一些计算的结果。这段代码的问题是 process() 必须返回与 \\’results\\’ 数据框相同的布局。如果我更改 process() 返回的内容,我还必须更改 \\’results\\’。还必须删除结果数据框中的第一行。

有没有更简单的方法来做到这一点? by() 可以按名称对 1 个数据帧进行分组,并为每个子组调用 process(),但我不能传入 df2 和 df3 子组。

  • process() 是什么?如果 df2 也可以给我们举个例子吗?由于 Name 中有重复项,我不确定是否要仅基于该变量合并 dfs。
  • 这与您在 Cross Validated 上提出的问题不同吗?如果没有,我们应该关闭两者之一,看起来您在那里找到了合适的答案:stats.stackexchange.com/questions/19731/…
  • process() 是我自己的函数,它返回一个数据框。每个 new.results 将包含特定名称的 1 行,由 df1、df2 和 df3 名称查询 (df1[df1$Name == name, ]) 返回。
  • @Chase:是的,请关闭关于 Crossvalidated 的问题。我不认为我自己能做到这一点。
  • @Robert – 我也不能直接关闭它。了解为什么那里提供的答案不能充分回答您的问题会很有帮助。如果您提供一个小的、可重现的问题,您将获得最好的帮助,以便其他人可以简单地复制/粘贴您的代码并查看它的运行情况,或者查看它在哪里无法执行您想要的操作。这个问题有几个关于提供好问题的好技巧:stackoverflow.com/questions/5963269/…


我会看看 wickham 的 ddply 和 plyr。他们听起来很不错,你的盟友。

http://svitsrv25.epfl.ch/R-doc/library/plyr/html/ddply-5k.html

基本思想是根据标准分割数据框。在您的情况下使用唯一名称,对每个组应用一个函数(像 sum 这样的罐装 R 函数或自定义的自制函数),然后将它们全部缝合在一起。

我不太了解不同的数据帧,但您可能会发现 lapply 更幸运。您可以构建一个函数,为每个组返回一个数据框。调用它
output<- lapply(X = as.list(the_list_of_unique_groups), FUN = your_function_for_each_group)

然后用
results <- do.call(“rbind”, output)

这种组合非常有用。祝你好运。


来源:https://www.codenong.com/8489600/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9942.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?