सूची बनाने से स्तंभों को डेटा की तालिका अभिव्यक्ति

0

सवाल

निम्नलिखित पर विचार करें dt:

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

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

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

मैं यहाँ हूँ कुल मिलाकर प्रत्येक स्तंभ द्वारा यह अद्वितीय मूल्यों और फिर गिनती कितने uniquye मूल्यों प्रत्येक स्तंभ है:

 > dt[,lapply(.SD,function(agg) dt[,.N,by=agg])]

   a.agg a.N b.agg b.N
1:     1   2     4   2
2:     2   1     5   1
3:     3   1     6   1

तो 1 दो बार प्रकट होता है में dt और इस प्रकार a.N है 2, एक ही तर्क पर चला जाता है के लिए अन्य मूल्यों ।

लेकिन समस्या है, तो इस परिवर्तनों के मूल datatable विभिन्न आयामों अंत में, बातें मिल जाएगा पुनर्नवीनीकरण.

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

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

> dt[,lapply(.SD,function(agg) dt[,.N,by=agg])]

   a.agg a.N b.agg b.N
1:     1   2     4   3
2:     2   1     5   1
3:     3   1     6   1
4:     7   1     4   3
Warning message:
In as.data.table.list(jval, .named = NULL) :
  Item 2 has 3 rows but longest item has 4; recycled with remainder.

नहीं रह गया है कि सही जवाब है, क्योंकि b.N चाहिए अब केवल 3 पंक्तियों और बातें(वेक्टर) मिला पुनर्नवीनीकरण.

यह है क्यों मैं की तरह होता है को बदलने के लिए अभिव्यक्ति dt[,lapply(.SD,function(agg) dt[,.N,by=agg])] एक सूची में विभिन्न आयामों के साथ, नाम के साथ आइटम की सूची में जा रहा है के नाम के कॉलम में तब्दील हो dt.

एक स्केच की मैं क्या मतलब है:

newlist
$a.agg
1 2 3 7
$a.N
2 1 1 1
$b.agg
4 5 6 4
$b.N
3 1 1

या और भी बेहतर समाधान के लिए किया जाएगा प्राप्त करने के लिए एक datatable के साथ एक ट्रैक पर स्तंभों में से एक स्तंभ है:

    dt_final
   agg N column
    1 2 a
    2 1 a
    3 1 a
    7 1 a
    4 3 b
    5 1 b
    6 1 b
data.table r
2021-11-24 04:02:29
1

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

2

प्राप्त डेटा में लंबे समय प्रारूप और फिर कुल समूह द्वारा.

library(data.table)

dt_long <- melt(dt, measure.vars = c('a', 'b'))
dt_long[, .N, .(variable, value)]

#   variable value N
#1:        a     1 2
#2:        a     2 1
#3:        a     3 1
#4:        a     7 1
#5:        b     4 3
#6:        b     5 1
#7:        b     6 1

में tidyverse -

library(dplyr)
library(tidyr)

dt %>%
  pivot_longer(cols = everything()) %>%
  count(name, value)
2021-11-24 06:03:29

सुंदर :) . measure.vars = colnames(d) यदि आप कई हजार स्तंभ हैं ।
moth

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

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

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

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

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