为可怕的标题道歉,不知道如何描述我的问题。
我有一个如下所示的数据集:
----------------------------------
| media_id | filename | duration |
----------------------------------
| 782363 | 000041f1 | 12577 |
----------------------------------
| 782379 | 000041f1 | 12570 |
----------------------------------
| 1449109 | 00006c9b | 530423 |
----------------------------------
| 1449160 | 00006c9b | 530420 |
----------------------------------
我想要做的是匹配唯一的文件名(最多只能匹配两行),如下所示:
----------------------------------------------------------
| media_id | filename | duration | filename2 | duration2 |
----------------------------------------------------------
| 782363 | 000041f1 | 12577 | 000041f1 | 12570 |
----------------------------------------------------------
| 1449109 | 00006c9b | 530423 | 00006c9b | 530420 |
----------------------------------------------------------
目的是计算持续时间和持续时间之间的绝对差值2.对于上下文,原始文件名具有不同的文件扩展名,但我已将其截断,因为这是我需要匹配持续时间的方式。我试图查看fileA在从一种格式转换为另一种格式后是否与fileB不同。
我熟悉dplyr,但我能想出的最佳算法是
1-Identify the unique filenames
2-Search through the filename column using grep to locate the rows where the filenames are located
3-Somehow transform, or create a new data frame, that matches the filenames.
任何想法/建议?数据集将有大约100万行,所以理想情况下我需要一些性能相当的东西。
答案 0 :(得分:0)
你也必须重塑
library(dplyr)
library(tidyr)
data_frame(
media_id = c(782363, 782379, 1449109, 1449160),
filename = c("000041f1", "000041f1", "00006c9b", "00006c9b"),
duration = c(12577, 12570, 530423, 530420) ) %>%
group_by(filename) %>%
mutate(sub_group = 1:n()) %>%
gather(variable, value, -filename, -sub_group) %>%
unite(new_variable, variable, sub_group) %>%
spread(new_variable, value) %>%
mutate(duration.difference = duration_1 - duration_2)
答案 1 :(得分:0)
dplyr
之外的另一个选择是使用reshape2
的{{1}}。它本质上是一个unmelt / pivot功能。
dcast
让R在更大规模上工作是一个不同的挑战,但我相信这是一个相当简单的解决方案。祝你好运。