"id"로 그룹화하고 마지막 네 열 (그룹별로)에 몇 가지 산술 기능을 적용하고 해당 행을 포함하는 df에 새 행을 추가하려면 어떻게합니까? 결과.R 행의 결과를 df로 그룹화하여 이름별로 여러 열을 그룹으로 계산합니다.
d1 d2 id type treat v1_gm v2_pct v3_pct
1 info info 1 leaf NA 0.2 70 90
2 info info 1 flower A 0.5 80 80
3 info info 2 leaf NA 0.4 65 80
4 info info 2 flower A 0.1 90 90
5 info info 3 leaf NA 0.6 55 80
6 info info 3 stem A 0.3 80 30
7 info info 4 leaf NA 0.6 30 40
8 info info 4 flower A 0.7 75 75
9 info info 5 leaf/stem NA 0.8 80 75
재현 예 :가
df <- data.frame(matrix(NA, nrow = 9, ncol = 8), row.names=NULL)
colnames(df) <- c("d1","d2","id","type","treat","v1_gm","v2_pct","v3_pct")
df$d1 <- "info"
df$d2 <- "info"
id <- c(1,1,2,2,3,3,4,4,5)
df$id <- c(1,1,2,2,3,3,4,4,5)
df$type <- c("leaf","flower","leaf","flower","leaf","stem","leaf","flower","leaf/stem")
df$treat <- c(NA,"A",NA,"A",NA,"A",NA,"A",NA)
df$v1_gm <- c(0.2,0.5,0.4,0.1,0.6,0.3,0.6,0.7,0.8)
df$v2_pct <- c(70,80,65,90,55,80,30,75,80)
df$v3_pct <- c(90,80,80,90,80,30,40,75,75)
결과 테이블은 다음과 같이 표시한다 (5 개) 여기에서 샘플 (ID) 및 (8) 열이 예시적인 예이다. 행 3, 6, 9 및 13은 결과가 포함 된 새 행입니다. 새로운 행은 테이블의 끝에 추가 할 수도 있고 나중에 rbind를 사용하여 추가 할 tmp df에 넣을 수도 있습니다 (어느 쪽이든하는 방법을 알 수는 없습니다). 그룹화 var는 열 "id"입니다. 함수 합계는 "v1_gm"에 사용됩니다. '평균'기능은 여러 개의 연속 열에 사용되며 여기에서 'v1_pct'및 'v3_pct'는 이름으로 호출해야합니다 (예 : v1_pct : v3_pct). 새 행의 "type"값은 그룹 행의 "type"에서 연결되며 "d1"및 "d2"는 treat == "A"인 그룹 행에서 복사되고 새 행의 "treat" 행에 값 "cmb"가 지정됩니다.
d1 d2 id type treat v1_gm v2_pct v3_pct
1 info info 1 leaf NA 0.2 70 90
2 info info 1 flower A 0.5 80 80
3 info info 1 leaf/flower cmb 0.7 75 85
4 info info 2 leaf NA 0.4 65 80
5 info info 2 flower A 0.1 90 90
6 info info 2 leaf/flower cmb 0.5 77.5 85
7 info info 3 leaf NA 0.6 55 80
8 info info 3 stem A 0.3 80 30
9 info info 3 leaf/stem cmb 0.9 67.5 55
10 info info 4 leaf NA 0.6 30 40
11 info info 4 flower A 0.7 75 75
13 info info 4 leaf/flower cmb 1.3 52.5 57.5
14 info info 5 leaf/stem NA 0.8 80 75
연결할은 str_c에서 (유형 9 월은 = "/") 작동하지 않는 것,하지만 그랬다면 나는 한 번 파일에 결과를 보내! = "A 치료의 모든 행을 삭제할 수 있습니다 ", 계산 된 열 이름을 원래 col 이름으로 바꾼 후 tmp를 원래 파일로 rbind하십시오. –
죄송합니다. 대신 붙여 넣기 명령을 사용할 수 있습니다. 답변을 변경했습니다. 그런 다음 pipe 명령을 사용하여 필터링 할 수 있습니다. – theArun
실제로, 실제 데이터 테이블에는 v3_pct 이후와 유사한 추가 25 개의 열이 있습니다.이 중 모두는 v2_pct 및 v3_pct와 동일한 방식으로 처리해야합니다 (즉, 그룹). 마지막 열이 v25 인 경우 v1_pct : v25를 선택하여 계산을 위해 개별적으로 입력하지 않도록 코드를 일반화하는 방법이 있습니까? –