2017-09-22 3 views
1

데이터 테이블 값을 한 열을 기준으로 집계하는 함수를 만들려고했지만 열 이름에 toString() 인수를 전달할 수 없습니다. 다음의 예는 더 잘 보여줄 수 : 데이터 테이블 집계 및 사용 toString()

t1 <- data.table(P = c("a", "b", "c", "d", "a", "b"), Q = 
c("1","2","3","4","5","6")) 

t1[ ,toString(Q), by = P] # this works 
t1[ ,toString(colnames(t1)[2]), by = P] # this does not give me the desired result 

내가 위의 다음과 같은 결과를 얻을 :

P V1 
1: a Q 
2: b Q 
3: c Q 
4: d Q 

에 비해 예상 : 나는 따옴표를 제거하는 시도

P V1 
1: a 1, 5 
2: b 2, 6 
3: c 3 
4: d 4 

noquotes()를 사용하지만 나에게는 아무런 효과가 없다. 내가 실수를 저지르고있는 곳을 누군가가 지적 할 수 있습니까?

답변

2

우리는 값을 반환 할 get을 사용할 수있는 것은

t1[ , toString(get(colnames(t1)[2])), by = P] 
# P V1 
#1: a 1, 5 
#2: b 2, 6 
#3: c 3 
#4: d 4 

또는 eval/as.symbol

t1[, toString(eval(as.symbol(names(t1)[2]))), by = P] 

또는 표준 방법을 .SDcols

t1[, toString(.SD[[1]]), by = P, .SDcols = names(t1)[2]] 
+0

고마워에서 지정하는 것입니다! 하지만 noquote()를 사용할 때의 차이점은 무엇입니까? – Ayush

+0

또한 문자열이 있으면 어떻게됩니까? 인수로 열 이름을 전달하는 함수를 만들 계획입니다. – Ayush

+0

두 번째 답변에 감사드립니다. – Ayush