这是一个包含一列用户 ID 的数据框:
> head(df)
uid
1 14070210
2 14080815
3 14091420
为了便于论证,我想创建一个包含用户 ID 平方根的新列,以及另一个包含用户 ID 哈希值的新列。所以我这样做:
df_mutated <- df %>%
mutate(sqrt_uid = sqrt(uid), hashed_uid = digest(uid))
... 其中digest() 来自digest 包。
虽然平方根似乎有效,但摘要函数为每个用户 ID 返回相同的值。
> head(df_mutated)
uid sqrt_uid hashed_uid
1 14070210 3751.028 f8c4b39403e57d85cd1698d2353954d0
2 14080815 3752.441 f8c4b39403e57d85cd1698d2353954d0
3 14091420 3753.854 f8c4b39403e57d85cd1698d2353954d0
这对我来说很奇怪。如果没有 dplyr,digest() 函数会针对不同的输入返回不同的值。我对 dplyr 有什么不明白的地方?
Thanks
The digest()
函数未矢量化。因此,如果您传入一个向量,您将获得整个向量的一个值,而不是向量的每个元素的摘要。由于它返回一个值,因此该值会为 data.frame 的每一行回收。您可以创建自己的矢量化版本
vdigest <- Vectorize(digest)
df %>% mutate(sqrt_uid = sqrt(uid), hashed_uid = vdigest(uid))
# uid sqrt_uid hashed_uid
# 1 14070210 3751.028 cc90019421220a24f75b5ed5daec36ff
# 2 14080815 3752.441 9f7f643940b692dd9c7effad439547e8
# 3 14091420 3753.854 89e6666fdfdbfb532b2d7940def9d47d
它与您单独传递每个向量元素时得到的结果相匹配
digest(df$uid[1])
# [1] "cc90019421220a24f75b5ed5daec36ff"
digest(df$uid[3])
# [1] "89e6666fdfdbfb532b2d7940def9d47d"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)