각 열에 대한 합계로 데이터 프레임에 행 추가
각 열에 대한 값을 합산하는 행을 추가하고자 하는 데이터 프레임이 있습니다.예를 들어, 다음과 같은 데이터가 있다고 가정해 보겠습니다.
x <- data.frame(Language=c("C++", "Java", "Python"),
Files=c(4009, 210, 35),
LOC=c(15328,876, 200),
stringsAsFactors=FALSE)
데이터는 다음과 같습니다.
Language Files LOC
1 C++ 4009 15328
2 Java 210 876
3 Python 35 200
내 본능은 이렇게 하는 겁니다
y <- rbind(x, c("Total", colSums(x[,2:3])))
그리고 이것은 총계를 계산합니다.
> y
Language Files LOC
1 C++ 4009 15328
2 Java 210 876
3 Python 35 200
4 Total 4254 16404
문제는 파일과 LOC 열이 모두 문자열로 변환되었다는 것입니다.
> y$LOC
[1] "15328" "876" "200" "16404"
가 를 에 이 으로 으로 가 를 이 에 c("Total", colSums(x[,2:3])
숫자와 문자열을 모두 입력하고 모든 요소를 공통 유형으로 변환하여 모든 벡터 요소가 동일하도록 합니다.그러면 Files(파일) 및 LOC(로컬) 열에서도 동일한 현상이 발생합니다.
어떻게 하는 게 더 좋을까요?
참조 adorn_totals()
관리인 패키지에서:
library(janitor)
x %>%
adorn_totals("row")
#> Language Files LOC
#> C++ 4009 15328
#> Java 210 876
#> Python 35 200
#> Total 4254 16404
숫자 열은 클래스 숫자로 남아 있습니다.
면책 사항:저는 이 패키지를 만들었고, 다음을 포함합니다.adorn_totals()
정확히 이 작업을 위해 만들어진 것입니다.
A tidyverse
이것을 하는 방법은 사용하는 것일 것입니다.bind_rows
결국 는으로)add_row
및 ) summarise
계산을 하기 위해서 입니다.여기서 문제는 우리가 1개를 제외한 모든 것에 대한 합계를 원한다는 것입니다. 따라서 트릭은 다음과 같습니다.
summarise_all(x, ~if(is.numeric(.)) sum(.) else "Total")
한 줄로:
x %>%
bind_rows(summarise_all(., ~if(is.numeric(.)) sum(.) else "Total"))
dplyr >=1.0으로 편집
사용할 수도 있습니다.across()
더 하게 표현됩니다 즉, 은 과 과 은
x %>%
bind_rows(summarise(.,
across(where(is.numeric), sum),
across(where(is.character), ~"Total")))
원하는 것을 얻을 수 있는 방법이 있습니다. 하지만 더 우아한 해결책이 있을 수도 있습니다.
rbind(x, data.frame(Language = "Total", t(colSums(x[, -1]))))
로, 이 요 하지 을 의 요 하지 로 이 을 의 Language
기둥.
합니까, 을 Language 이 합니까 이 더 합니까? 아니면 해당 열을 다음과 같이 생각하는 것이 더 적합합니까?row.names
data& 의 4개 로 변경됩니다. ? data.frame 3 의 4 2 (Files & LOC) 4 됩니다 4
x <- data.frame(Files = c(4009, 210, 35), LOC = c(15328,876, 200),
row.names = c("C++", "Java", "Python"), stringsAsFactors = FALSE)
x["Total" ,] <- colSums(x)
> x
Files LOC
C++ 4009 15328
Java 210 876
Python 35 200
Total 4254 16404
이거 먹어봐요.
y[4,] = c("Total", colSums(y[,2:3]))
Nicolas Ratto의 답변을 확장합니다. 만약 당신이 훨씬 더 많은 열을 가지고 있다면 당신은 사용할 수 있습니다.
x %>% add_row(Language = "Total", summarise(., across(where(is.numeric), sum)))
만약 (1) 우리가 필요하지 않다면,"Language"
행 수 ) 째에행을여낼수약고막다을과도이을면2(e다막g도이을ons(klsnd약setntefnwwtt째g"Sum"
"Total"
그러면 우리는 사용할 수 있습니다.addmargins
다음과 같이:
rownames(x) <- x$Language
addmargins(as.table(as.matrix(x[-1])), 1)
제공:
Files LOC
C++ 4009 15328
Java 210 876
Python 35 200
Sum 4254 16404
에 에 을 을 에 "Language"
총 총에이는고d는이wlde고총에"Total"
그러면 좀 더 길어집니다.
rownames(x) <- x$Language
Total <- sum
xa <- addmargins(as.table(as.matrix(x[-1])), 1, FUN = Total)
data.frame(Language = rownames(xa), as.matrix(xa[]), row.names = NULL)
제공:
Language Files LOC
1 C++ 4009 15328
2 Java 210 876
3 Python 35 200
4 Total 4254 16404
이거 먹어봐요.
library(tibble)
x %>% add_row( Language="Total",Files = sum(.$Files),LOC = sum(.$LOC) )
df %>% bind_rows(purrr::map_dbl(.,sum))
데이터 프레임에 열 합계를 포함시키시겠습니까?이제 데이터 프레임의 해석은 행에 따라 달라집니다.예를들면,
- 행 1-(n-1): 특정 언어와 연결된 파일 수
- 행: 모든 언어와 연결된 파일 수
데이터를 부분 집합화하기 시작하면 더 혼란스러워집니다.예를 들어, 어떤 언어에 100개 이상의 파일이 있는지 알고 싶다고 가정합니다.
> x = data.frame(Files=c(4009, 210, 35),
LOC=c(15328,876, 200),
row.names=c("C++", "Java", "Python"),
stringsAsFactors=FALSE)
> x["Total" ,] = colSums(x)
> x[x$Files > 100,]
Files LOC
C++ 4009 15328
Java 210 876
Total 4254 16404#But this refers to all languages!
그Total
행은 이제 틀렸습니다!
개인적으로 저는 열 합을 계산해서 별도의 벡터에 저장할 것입니다.
프레젠테이션을 내보내기 전 마지막 단계라고 언급했으므로, 명확한 설명을 위해 공백이 포함된 열 이름이 있을 수 있습니다(예: "Grand Total").그렇다면 다음은 생성된 data.frame이 일치하지 않는 열 이름으로 인해 발생하는 오류 없이 원래 데이터 집합에 바인딩되도록 보장합니다.
dfTotals <- data.frame(Language="Total",t(colSums(x[,-1]))))
colnames(dfTotals) <- names(x)
rbind(x, dfTotals)
만약 당신이 열을 숫자로 강요한다면 당신의 원래 본능은 효과가 있을 것입니다.
y$LOC <- as.numeric(y$LOC)
y$Files <- as.numeric(y$Files)
그리고 colSums()와 rbind()를 적용합니다.
언급URL : https://stackoverflow.com/questions/4946873/add-row-to-a-data-frame-with-total-sum-for-each-column
'programing' 카테고리의 다른 글
업로드가 완료될 때까지 XHR 진행 이벤트가 발생하지 않습니까? (0) | 2023.09.16 |
---|---|
XML 저장 및 형식 보존을 위한 Powershell (0) | 2023.09.16 |
(T)의 크기 == (정조 T)의 크기 및 (T)의 정렬 == (정조 T)의 정렬 여부 (0) | 2023.09.16 |
Excel 피벗 테이블에서 "Grand Total" 열로 정렬하시겠습니까? (0) | 2023.09.16 |
Submodule로 Subversion 저장소를 가질 수 있습니까? (0) | 2023.09.11 |