2016-11-13 4 views
0

나는 에서 카운트 주파수에 내가 원하는이주파수 데이터 테이블에 여러 열이

require(data.table) 
dt <- data.table(a= c("a","a","b","b","b"), b= c("a","a","c","c","e"), c=c("d","d","b","b","b")) 

같은 데이터 테이블의 모든 열 있습니다. 하나씩 차례로 수행하는 방법을 알고 있지만 데이터에 많은 열이 있기 때문에 한 가지 명령으로 수행하려고합니다.

결과이 하나 여야합니다

dt[,a1:=.N, by = c("a")] 
dt[,a2:=.N, by = c("b")] 
dt[,a3:=.N, by = c("c")] 
+1

는'에 대한()'루프를 사용합니다. –

+0

@RichScriven에서 예를 보여 줄 수 있습니까? –

+3

by = c (names (dt) [Nt])에 의해'nm1 <- paste0 ("a", seq_along (dt)); (seq_along (dt)에서 j) { dt [ j])] }' – akrun

답변

-1
require(data.table) 
dt <- data.table(a= c("a","a","b","b","b"), 
       b= c("a","a","c","c","e"), 
       c=c("d","d","b","b","b")) 
#dt 
# a b c 
#1: a a d 
#2: a a d 
#3: b c b 
#4: b c b 
#5: b e b 

l=lapply(seq_along(colnames(dt)), 
     function(i) dt[,eval(colnames(dt)[i]),with=F][, x:=.N,by=eval(colnames(dt)[i])]) 
#l 
#[[1]] 
# a x 
#1: a 2 
#2: a 2 
#3: b 3 
#4: b 3 
#5: b 3 

#[[2]] 
# b x 
#1: a 2 
#2: a 2 
#3: c 2 
#4: c 2 
#5: e 1 

#[[3]] 
# c x 
#1: d 2 
#2: d 2 
#3: b 3 
#4: b 3 
#5: b 3 


df = as.data.frame(l) 

# replacing alternate column names with concatenating "_count" to it 
colnames(df)[seq(2,length(colnames(df)),2)]= 
paste0(colnames(df)[seq(1,length(colnames(df)),2)],"_count") 

#df 
# a a_count b b_count c c_count 
#1 a  2 a  2 d  2 
#2 a  2 a  2 d  2 
#3 b  3 c  2 b  3 
#4 b  3 c  2 b  3 
#5 b  3 e  1 b  3 
관련 문제