निम्नलिखित पर विचार करें 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
measure.vars = colnames(d)
यदि आप कई हजार स्तंभ हैं ।