r - R:如何从一个非常大的表格中快速选择两列中的常用词或相同数字?
问题描述
我有一张非常大的桌子(1,000,000 X 20)要处理,需要快速完成。
例如,我的表中有 2 列 X2 和 X3:
X1 X2 X3
c1 1 100020003001, 100020003002, 100020003003 100020003001, 100020003002, 100020003004
c2 2 100020003001, 100020004002, 100020004003 100020003001, 100020004007, 100020004009
c3 3 100050006003, 100050006001, 100050006001 100050006011, 100050006013, 100050006021
现在我想创建 2 个新列,其中包含
1)常用词或相同的数字
例如:[1] "100020003001" "100020003002"
2)常用词或相同数字的计数
例如:[1] 2
我已经尝试了以下线程中的方法,但是,处理时间很慢,因为我使用了 for 循环:
library(stringi)
Reduce(`intersect`,stri_extract_all_regex(vec1,"\\w+"))
谢谢您的帮助!我在这里真的很挣扎......
解决方案
我们可以将 'X2'、'X3' 列除以,,
得到intersect
对应list
元素的map2
lengths
list
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 <- 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"))
推荐阅读
- javascript - 将“活动”切换到课堂
- php - 如何防止缩略图看起来缩小?
- sql - SQL获取XML的叶子节点
- swift - 在 Swift 中重写 CIImage 最终会导致处理器下降到 0% 并冻结
- ember.js - 如何在 Ember 中为自定义构建环境指定压缩
- r - 为什么当我对任何东西运行 for 循环时,R 只保存最后一个结果?
- tensorflow - 检查Tensorflow(批处理版)张量列表中是否存在值的好方法是什么?
- javascript - 不变性是如何实现的
- swift - Swift CoreGraphics UIBezierPath 不会正确填充内部
- javascript - 在 DOM 准备好之前声明你的 javascript 方法