【发布时间】:2019-01-08 01:45:54
【问题描述】:
我是第一次使用 sparklyr,但在匹配两个向量的字符串以大规模创建新变量时遇到了麻烦。我的问题有以下一般结构:
我有一个大的 url 数据集:
df_1 <- data.frame(
col1 = c(1,2,3,4,5,6,7,8,9,10),
col2 = c("john.com/abcd", "ringo.com/defg", "paul.com/hijk", "george.com/lmno", "rob.com/pqrs", "sam.com/tuvw",
"matt.com/xyza", "lenny.com/bcde", "bob.com/fghi", "tom.com/jklm"))
col1 col2
1 john.com/abcd
2 ringo.com/defg
3 paul.com/hijk
4 george.com/lmno
5 rob.com/pqrs
6 sam.com/tuvw
7 matt.com/xyza
8 lenny.com/bcde
9 bob.com/fghi
10 tom.com/jklm
还有另一个较小的通用领域数据集:
df_2 <- data.frame(
col1 = c(1,2,3,4,5,6,7),
col2 = c("john.com", "jake.com", "tim.com", "paul.com", "rob.com", "harry.com", "chris.com"))
col1 col2
1 john.com
2 jake.com
3 tim.com
4 paul.com
5 rob.com
6 harry.com
7 chris.com
我想使用 df_2 (df_2$col2) 中的域向量为 df_1 创建一个虚拟变量,指示域是否出现在 df_1 (df_1$col_2) 中的 url 中。生成的数据框应类似于 df_3。
df_3 <- data.frame(
col1 = c(1,2,3,4,5,6,7,8,9,10),
col2 = c("john.com/abcd", "ringo.com/defg", "paul.com/hijk", "george.com/lmno", "rob.com/pqrs", "sam.com/tuvw",
"matt.com/xyza", "lenny.com/bcde", "bob.com/fghi", "tom.com/jklm"),
col3 = c(1,0,1,0,1,0,0,0,0,0))
col1 col2 col3
1 john.com/abcd 1
2 ringo.com/defg 0
3 paul.com/hijk 1
4 george.com/lmno 0
5 rob.com/pqrs 1
6 sam.com/tuvw 0
7 matt.com/xyza 0
8 lenny.com/bcde 0
9 bob.com/fghi 0
10 tom.com/jklm 0
我已阅读这篇文章:How to filter on partial match using sparklyr
并尝试使用类似
的方式对 df_2 的每个单独观察进行编码df_3 <- df_1 %>%
mutate(col3 =
ifelse(like(df_1$col2, "john.com") | df_1$col2, "jake.com" | etc.,1,0))
但到目前为止,我一直遇到堆栈限制或 R 无法识别类似功能。必须有一种更简单的方法来做到这一点。感谢您的任何帮助。
【问题讨论】:
标签: r apache-spark dplyr sparklyr