수색…


각 열의 합

데이터 세트의 각 열 sumsum 해야한다고 가정합니다.

set.seed(20)
df1 <- data.frame(ID = rep(c("A", "B", "C"), each = 3), V1 = rnorm(9), V2 = rnorm(9))
m1 <- as.matrix(df1[-1])

이를 수행 할 수있는 많은 방법이 있습니다. base R 사용하면 가장 좋은 옵션은 colSums

colSums(df1[-1], na.rm = TRUE)

여기서는 첫 번째 열을 숫자가 아니므로 제거했으며 na.rm = TRUE 지정하여 각 열의 sumsum 했습니다 (데이터 집합에 NAs가있는 경우)

이것은 matrix 에서도 작동합니다.

colSums(m1, na.rm = TRUE)

이것은 lapply/sapply/vapply 를 사용하여 반복 할 수 있습니다.

 lapply(df1[-1], sum, na.rm = TRUE)

출력은 list 입니다. vector 출력이 필요한 경우

 sapply(df1[-1], sum, na.rm = TRUE)

또는

 vapply(df1[-1], sum, na.rm = TRUE, numeric(1))

행렬의 경우 열을 반복하려는 경우 MARGIN = 1 을 사용하여 apply 를 사용 apply

 apply(m1, 2, FUN = sum, na.rm = TRUE)

dplyr 또는 data.table 과 같은 패키지를 사용하여이를 수행 할 수있는 방법이 있습니다.

 library(dplyr)
 df1 %>%
     summarise_at(vars(matches("^V\\d+")), sum, na.rm = TRUE)

여기서는 summarise_at sum 를 얻기 위해 필요한 열 이름과 일치하는 정규식을 전달합니다. 정규식은 V 시작하는 모든 열과 하나 이상의 숫자 ( \\d+ )가 일치합니다.

data.table 옵션은 다음과 같습니다.

library(data.table)   
setDT(df1)[, lapply(.SD, sum, na.rm = TRUE), .SDcols = 2:ncol(df1)]

우리는 'data.table'(에 'data.frame'변환 setDT(df1) ) 열이있는 기능을 적용 할 수 지정된 .SDcols Data.table (의 부분 집합을 통해 루프를 .SD )과 수 sum .


그룹을 작업 단위로 사용해야하는 경우 열 / 열 단위로 그룹을 지정하면 쉽게 수행 할 수 있습니다.

 df1 %>%
   group_by(ID) %>%   
   summarise_at(vars(matches("^V\\d+")), sum, na.rm = TRUE)

우리가해야 할 경우 sum 모든 열을 summarise_each 대신 사용할 수 있습니다 summarise_at

df1 %>%
    group_by(ID) %>%
    summarise_each(funs(sum(., na.rm = TRUE)))

data.table 옵션은 다음과 같습니다.

setDT(df1)[, lapply(.SD, sum, na.rm = TRUE), by = ID]   


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow