चुनें कॉलम है जो एक विशिष्ट मूल्य में डेटा.तालिका

0

सवाल

कम से कम उदाहरण के लिए:

dt <- data.table(a=c(1,2,3),b=c(4,5,6))

लग रहा है कि जैसे कि:

>  dt
   a b
1: 1 4
2: 2 5
3: 3 6

लगता है कि मैं करने के लिए चाहते हैं सूचकांक स्तंभ है, जहां एक 6 मूल्य, इस खिलौने में उदाहरण के लिए, यह आसान है के बाद से हम जानते हैं कि स्तंभ:

> dt[,.(b)]
   b
1: 4
2: 5
3: 6

अब क्या होगा अगर इस dt कई हजार स्तंभों और हम नहीं पता होगा, जहां 6 निहित है ।

मैं इस की कोशिश की:

> dt[,.SD==6]
         a     b
[1,] FALSE FALSE
[2,] FALSE FALSE
[3,] FALSE  TRUE

और इस:

> dt[,lapply(.SD,`==`,6)]
       a     b
1: FALSE FALSE
2: FALSE FALSE
3: FALSE  TRUE

और यह भी कि:

> dt[,lapply(.SD,function(x) any(x==6))]
       a    b
1: FALSE TRUE

लेकिन मैं नहीं मिल सकता है के मूल स्तंभ वापस:

   b
1: 4
2: 5
3: 6
data.table r
2021-11-23 09:48:09
2

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

1
dt[, colSums(dt == 6) > 0, with = FALSE]
#    b
# 1: 4
# 2: 5
# 3: 6
2021-11-23 09:59:49
1

उम्मीद है कि वहाँ है एक और अधिक सुरुचिपूर्ण समाधान है, लेकिन इस बीच में,:

dt[,sapply(dt, function(x) any(x == 6)), with=F]
   b
1: 4
2: 5
3: 6

यहाँ एक त्वरित बेंचमार्क डेटा के बाद से.टेबल पर अक्सर इस्तेमाल किया जाता है गति के लिए:

enter image description here

n=1000000
dt = data.table(V1 = round(runif(n) * 100), V2 = round(runif(n) * 100) ,V3 = round(runif(n) * 100), V4 = round(runif(n) * 100), V5 = round(runif(n) * 100), V6 = round(runif(n) * 100))

bench = microbenchmark::microbenchmark(
    user438383 = dt[,sapply(dt, function(x) any(x == 6)), with=F],
    Wimpel = dt[, colSums(dt == 6) > 0, with = FALSE],
    times = 10000
    )
2021-11-23 10:44:14

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

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

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

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

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