Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何快速地从一个非常大的表中选择两列中的常用词或相同的数字?_R_Dataframe_Data Science - Fatal编程技术网

R:如何快速地从一个非常大的表中选择两列中的常用词或相同的数字?

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获得相应列表元素的相交,并使用长度对列表中的元素数量

我有一个非常大的表(1000000 X 20)要处理,需要以一种快速的方式处理

例如,我的表格中有2列X2和X3:

现在我想创建两个新列,其中包含

1) 常用词或相同的数字

例如:
[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"))