कैसे गिनती करने के लिए संख्या कई तार दिखाई देते हैं में एक और स्ट्रिंग सूची से समूह?

0

सवाल

अब मैं दो डेटा, नाम और पाठ, और मैं चाहते हैं की गणना करने के लिए घटनाओं की संख्या में प्रत्येक नाम के नाम में चालू वर्ष में पाठहै, कि है, उत्पन्न करने के लिए डेटा परिणाम. कैसे करने के लिए इस लक्ष्य को हासिल? मैं करने की कोशिश की lapply और grepl, लेकिन दोनों में विफल रहा है. बहुत बहुत धन्यवाद!

name=data.table(year=c(2018,2019,2020),
                  name0=list(c("A","B","C"),c("B","C"),c("D","E","F")))
text=data.table(year=c(2018,2018,2019,2019,2020),
                text0=list(c("DEF","BG","CG"),c("ART","CWW"),c("DLK","BU","FO"),
                           c("A45","11B","C23"),c("EIU","CM")))
result=data.table(year=c(2018,2018,2018,2019,2019,2020,2020,2020),
                 name0=c("A","B","C","B","C","D","E","F"),
                 count=c(1,1,2,2,1,0,1,0))
data.table grepl lapply r
2021-11-23 15:24:57
1

सबसे अच्छा जवाब

2

एक विलय पर असूचीबद्ध मूल्यों काम करेंगे:

library(data.table)
merge(
  name[, .(name0 = unlist(name0)), by = .(year)],
  text[, .(name0 = unlist(strsplit(unlist(text0), ""))), by=.(year)][, ign := 1],
  by = c("year", "name0"), all.x = TRUE, allow.cartesian = TRUE
)[,.(count = sum(!is.na(ign))), by = .(year, name0)]
#     year  name0 count
#    <num> <char> <int>
# 1:  2018      A     1
# 2:  2018      B     1
# 3:  2018      C     2
# 4:  2019      B     2
# 5:  2019      C     1
# 6:  2020      D     0
# 7:  2020      E     1
# 8:  2020      F     0

के ign चर है, तो हम कर सकते हैं कि बल all.x=TRUE अभी तक के लिए खाते में थे कि उन लोगों में नहीं पाया y.


धीमी है, लेकिन शायद अधिक स्मृति-मितव्ययी विधि:

namelong <- name[, .(name0 = unlist(name0)), by = .(year)]
namelong
#     year  name0
#    <num> <char>
# 1:  2018      A
# 2:  2018      B
# 3:  2018      C
# 4:  2019      B
# 5:  2019      C
# 6:  2020      D
# 7:  2020      E
# 8:  2020      F

func <- function(yr, nm) text[year == yr, sum(grepl(nm, unlist(text0)))]
namelong[, count := do.call(mapply, c(list(FUN=func), unname(namelong)))]
#     year  name0 count
#    <num> <char> <int>
# 1:  2018      A     1
# 2:  2018      B     1
# 3:  2018      C     2
# 4:  2019      B     2
# 5:  2019      C     1
# 6:  2020      D     0
# 7:  2020      E     1
# 8:  2020      F     0
2021-11-23 18:51:35

धन्यवाद । मैं करने की कोशिश की है अपने कोड और वहाँ कोई समस्या नहीं है में उदाहरण के लिए, लेकिन अपने वास्तविक डेटा बहुत बड़ा है, और पंक्तियों के text 100 मिलियन से अधिक है, तो अनुसंधान रिपोर्ट त्रुटि: स्मृति समाप्त हो (सीमा पर पहुंच गया है?). क्या आप जानते हैं कैसे इस समस्या को हल?
Vesper

देखो अगर मेरा संपादित प्रदान करता है के लिए एक तरीका यह करना है. यह होने जा रहा है धीमी (यह अभी तक नहीं हटाया से एक for लूप) लेकिन कम फैलता स्मृति में.
r2evans

आपको बहुत बहुत धन्यवाद! समस्या का हल किया गया था.
Vesper

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में