R:如何快速地从一个非常大的表中选择两列中的常用词或相同的数字?
我有一个非常大的表(1000000 X 20)要处理,需要以一种快速的方式处理 例如,我的表格中有2列X2和X3: 现在我想创建两个新列,其中包含 1) 常用词或相同的数字 例如:R:如何快速地从一个非常大的表中选择两列中的常用词或相同的数字?,r,dataframe,data-science,R,Dataframe,Data Science,我有一个非常大的表(1000000 X 20)要处理,需要以一种快速的方式处理 例如,我的表格中有2列X2和X3: 现在我想创建两个新列,其中包含 1) 常用词或相同的数字 例如:[1]“100020003001”100020003002“ 2) 常用词或相同数字的计数 例如:[1]2 我已经在下面的线程中尝试了该方法,但是,由于使用for循环,处理时间很慢: 谢谢你的帮助! 我真的在这里挣扎 我们可以按,拆分'X2',X3'列,用map2获得相应列表元素的相交,并使用长度对列表中的元素数量
[1]“100020003001”100020003002“
2) 常用词或相同数字的计数
例如:[1]2
我已经在下面的线程中尝试了该方法,但是,由于使用for循环,处理时间很慢:
谢谢你的帮助!
我真的在这里挣扎 我们可以按
,
拆分'X2',X3'列,用map2
获得相应列表
元素的相交
,并使用长度
对列表中的元素数量进行“计数”
library(tidyverse)
df1 %>%
mutate(common_words = map2(strsplit(X2, ", "),
strsplit(X3, ", "),
intersect),
count = lengths(common_words))
# X1 X2 X3
#1 1 100020003001, 100020003002, 100020003003 100020003001, 100020003002, 100020003004
#2 2 100020003001, 100020004002, 100020004003 100020003001, 100020004007, 100020004009
#3 3 100050006003, 100050006001, 100050006001 100050006011, 100050006013, 100050006021
# common_words count
#1 100020003001, 100020003002 2
#2 100020003001 1
#3 0
或使用
base R
df1$common_words <- Map(intersect, strsplit(df1$X2, ", "), strsplit(df1$X3, ", "))
df1$count <- lengths(df1$common_words)
df1$常用词非常感谢!事实上,你帮了我两次:)这个过程只需要几秒钟!
library(tidyverse)
df1 %>%
mutate(common_words = map2(strsplit(X2, ", "),
strsplit(X3, ", "),
intersect),
count = lengths(common_words))
# X1 X2 X3
#1 1 100020003001, 100020003002, 100020003003 100020003001, 100020003002, 100020003004
#2 2 100020003001, 100020004002, 100020004003 100020003001, 100020004007, 100020004009
#3 3 100050006003, 100050006001, 100050006001 100050006011, 100050006013, 100050006021
# common_words count
#1 100020003001, 100020003002 2
#2 100020003001 1
#3 0
df1$common_words <- Map(intersect, strsplit(df1$X2, ", "), strsplit(df1$X3, ", "))
df1$count <- lengths(df1$common_words)
df1 <- structure(list(X1 = 1:3, X2 = c("100020003001, 100020003002, 100020003003",
"100020003001, 100020004002, 100020004003", "100050006003,
100050006001, 100050006001"
), X3 = c("100020003001, 100020003002, 100020003004", "100020003001,
100020004007, 100020004009",
"100050006011, 100050006013, 100050006021")), class = "data.frame",
row.names = c("c1", "c2", "c3"))