2017-09-06 3 views
2

요약본을 기존의 것으로부터 만들려고 시도하고 있습니다. 그러나 열 접두사를 전달할 수있는 함수에서이 작업을 수행하려고합니다. 필수.data.table 변수 이름을 사용하여 그룹화

질문/응답 here을 보았지만 := 연산자를 사용하지 않을 때 해결 방법을 찾으려고합니다.

Reprex :

library(data.table) 
tbl1 <- data.table(urn = c("a", "a", "a", "b", "b", "b"), 
      amount = c(1, 2, 1, 3, 3, 4)) 

# urn amount 
# 1: a  1 
# 2: a  2 
# 3: a  1 
# 4: b  3 
# 5: b  3 
# 6: b  4 

tbl2 <- tbl1[, .(mean_amt = mean(amount), 
       rows = .N), 
      by = urn] 

# urn mean_amt rows 
# 1: a 1.333333 3 
# 2: b 3.333333 3 

이 내가 접두사를 포함 할 수 있도록하고 싶습니다 언급하지만 같은 열 이름이 만들어지는 고정 이름을 사용하는 것은입니다. Error: unexpected '=' in " tbl2 <- tbl1[, .(paste0(prefix, mean_amt) ="

위의 작업을 만드는 방법에 대한 어떤 생각을 감상 할 수있다 : 코드가 없다는 오류를 얻을 수 불행히도 것을

prefix <- "mypfx_" 
tbl2 <- tbl1[, .(paste0(prefix, mean_amt) = mean(amount), 
       paste0(prefix, rows) = .N), 
      by = urn] 

# Desired output 
# urn mypfx_mean_amt mypfx_rows 
# 1: a  1.333333   3 
# 2: b  3.333333   3 

:

나는 다음과 같은 시도했습니다.

답변

2

당신은 동적으로 열 이름을 변경 setNames를 사용할 수 있습니다

참고
prefix <- "mypfx_" 
tbl2 <- tbl1[, setNames(list(mean(amount), .N), paste0(prefix, c("mean_amt", "rows"))), 
       by = urn] 

tbl2 
# urn mypfx_mean_amt mypfx_rows 
#1: a  1.333333   3 
#2: b  3.333333   3 
+1

, 메모는'TBL2 <에있다 - (양), .N) (TBL1 [setNames (목록 뜻 paste0 (접두사, by = urn, verbose = TRUE]', 이는 비효율적이라고 말합니다. 그래도 나는 그 주위의 최선의 방법을 모른다. – Frank