그것은 분명하지 않다 및 get
. 영업 이익의 질문에 대한 Map
이기 때문에 toString
이 paste(..., collapse=', ')
dt2[, .(date1 = mean(date1), charval = paste(charval, collapse=";")), id]
# id date1 charval
#1: 1 2009-01-02 aa;vv;ss
#2: 2 2009-01-05 a;b;c;d
입니다 : 'ID'로 그룹화 한 후,
dt2[, .(date1 = mean(date1), charval = toString(charval)), id]
# id date1 charval
#1: 1 2009-01-02 aa, vv, ss
#2: 2 2009-01-05 a, b, c, d
참고 함께 '날짜 1'과 paste
'charval'의 mean
를 얻을 수 get
을 사용하여 mean
으로 전화하십시오. 이 트리거 될 것 같습니다
경우 (! is.numeric (x)의 & &! is.complex (x)는 & &! is.logical (X)) { 경고 ("인수가 숫자가 아니거나 논리적 :) " 리턴 (NA_real_)
를 NA를 반환하고이 numeric
로 저장되어 있지만 '날짜 1은'클래스 Date
의 것을 발견 할 때 NA를 반환합니다. 한 가지 옵션은 get
에 을 지정하는 것입니다.
또 다른 문제는 ifelse
을 사용하는 것입니다. 이 두 요소
dt2[, Map(function(x, y) if(x != "paste") get(x, envir = parent.frame())(y, na.rm = TRUE)
else paste(y, collapse=':'), setNames(c("mean", "paste"), names(.SD)), .SD), by = id]
# id date1 charval
#1: 1 2009-01-02 aa:vv:ss
#2: 2 2009-01-05 a:b:c:d
get
종류의 까다 롭습니다하고 올바른 환경을 지정하면
get("mean")(dt2$date1)
#[1] "2009-01-04"
또는 대신 if/else
에 예상대로 작동으로는 if/else
를 사용하는 것이 좋습니다 "붙여 넣기"문자열을 확인하려면 열 class
을 확인하고 character
인 경우 paste
을 입력하거나 mean
를 반환하십시오.
dt2[, Map(function(x, y) if(is.character(y)) get(x)(y, collapse=":")
else get(x, envir = parent.frame())(y, na.rm = TRUE),
setNames(c("mean", "paste"), names(.SD)), .SD), by = id]
# id date1 charval
#1: 1 2009-01-02 aa:vv:ss
#2: 2 2009-01-05 a:b:c:d
번거 로움없이 첫 번째 방법을 사용하는 것이 더 좋습니다.