在R中使用dplyr和digest将散列添加到每一行

时间:2017-09-21 04:38:18

标签: r dplyr digest

我需要为数据集中的每一行添加指纹,以便检查相同集的更高版本以查找差异。

我知道如何为R中的每一行添加哈希,如下所示:

data.frame(iris,hash=apply(iris,1,digest))

我正在学习使用dplyr,因为数据集变得越来越大,我需要将它们存储在SQL Server中,我尝试了类似下面的内容,但哈希不起作用,所有行都给出相同的哈希:

iris %>%
  rowwise() %>%
  mutate(hash=digest(.))

使用dplyr进行行式散列的任何线索?谢谢!

1 个答案:

答案 0 :(得分:4)

我们可以使用do

res <- iris %>%
         rowwise() %>% 
         do(data.frame(., hash = digest(.)))
head(res, 3)
# A tibble: 3 x 6
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species                             hash
#         <dbl>       <dbl>        <dbl>       <dbl>  <fctr>                            <chr>
#1          5.1         3.5          1.4         0.2  setosa e261621c90a9887a85d70aa460127c78
#2          4.9         3.0          1.4         0.2  setosa 7bf67322858048d82e19adb6399ef7a4
#3          4.7         3.2          1.3         0.2  setosa c20f3ee03573aed5929940a29e07a8bb

请注意,在apply过程中,所有列都转换为单个类,apply转换为matrix,矩阵只能容纳一个类。关于将factor转换为character

会有警告