2016-08-13 3 views
0
을 입력하십시오.

데이터 프레임을 여러 볼륨 열로 만 만들고 데이터 프레임에있는 test라는 총 열을 만들고 싶습니다. 아래 코드는 단지 test <- ...으로 설정했지만, 왼쪽에 summary_transposed_no_time$을 추가하면 코드가 데이터 프레임에 추가되지 않는 것 같습니다.총 행 합계 열을 데이터 프레임에 R

나는이 코드 조각을 어떻게 전개하여 모든 열이 마이너스 열 1인지 테스트를 만들 수 있는지 알고 싶습니다. 그리고 나중에 또 다른 테스트 열 (아마도 test2라고 불리는)을 만들 것입니다. 모든 열을 뺀 열 2의 요약 - (그들은 규칙을 코드가 실행될 때마다 이름으로 변경할 수) 열심히 열 위치가 아닌 열 이름을 코딩 할 수 있습니다 그래서 여기

w <- ncol(summary_transposed_no_time) 
summary_transposed_no_time$test <- apply(summary_transposed_no_time[,c(1:w)], 1, sum) 
그들을 포함하지 않은

summary_transposed_no_time의 예 :

postal_dist_a | postal_dist_b | postal_dist_c 
------------- | ------------- | ------------- 
20   | 25   | 15 
25   | 40   | 23 
31   | 32   | 19 
24   | 39   | 17 
37   | 19   | 26 
summary_transposed_no_time 내

원하는 결과 열 :

postal_dist_a | postal_dist_b | postal_dist_c | test 
------------- | ------------- | ------------- | ------------- 
20   | 25   | 15   | 60 
25   | 40   | 23   | 88 
31   | 32   | 19   | 82 
24   | 39   | 17   | 80 
37   | 19   | 26   | 82 
+0

예제를 재현 할 수 없습니다. https://stackoverflow.com/help/mcve를 참조하십시오. –

답변

1

당신은 reprocucible 예를 제공해야합니다. 그러나 만약 당신의 질문이 정말로 단지 행을 어떻게하는지에 관한 것입니다, 나는 오히려 내장 함수 rowSum을 사용할 것입니다. 귀하의 코드는 다음과 같습니다 나는 DF 내의 모든 열에 대해 "total_"를 만드는 방법을 발견했습니다

set.seed(1) 
# I recreate a table more or less like yours 
summary_transposed_no_time=data.frame(matrix(rnorm(1000),ncol=5)) 
n=ncol(summary_transposed_no_time) 

# Test that contains the rowsum 
summary_transposed_no_time$test=rowSums(summary_transposed_no_time) 

# test1 rowsum minus column 1 
summary_transposed_no_time$testm1=rowSums(summary_transposed_no_time[,2:n]) 
# test2 rowsum minus column 2 
summary_transposed_no_time$testm2=rowSums(summary_transposed_no_time[,c(1,3:n)]) 
#test_i minus column i 
i=3 
summary_transposed_no_time$testmi=rowSums(summary_transposed_no_time[,c(1:n)][,-i]) 

#check on first line : 
sum(summary_transposed_no_time[1,1:n])==summary_transposed_no_time$test[1] 
sum(summary_transposed_no_time[1,2:n])==summary_transposed_no_time$testm1[1] 
sum(summary_transposed_no_time[1,c(1,3:n)])==summary_transposed_no_time$testm2[1] 
sum(summary_transposed_no_time[1,c(1:2,4:n)])==summary_transposed_no_time$testmi[1] 
+0

감사합니다. Arault, 제공 한 행을 실행하고 있습니다. summary_transposed_no_time $ testm1 = rowSums (summary_transposed_no_time [, 1 : n])를 ncol 개수 및 인쇄 전후에 단계. ncols에 의해 인쇄 된 숫자는 testm1을 만들기 전에 132에서 133으로 바뀌지 만 testm1 열을 찾을 수 없습니다. 내가 뭘 잘못하고 있는지 모르니? 내가 만든 테이블을 실행했고 그 안에 testm1을 볼 수 있습니까? –

+0

그것은 이상합니다. summary_transposed_no_time $ testm1 [1,1]을 수행하면 어떻게됩니까? 왜냐하면 열의 수가 바뀌면 무언가를 만들어 냈을 것입니다. 콜럼의 이름을보기 위해 작동하지 않으면 콜론 (summary_transposed_no_time)을 시도하십시오. 귀하의 의견에 summary_transposed_no_time [, ** 1 ** : n]이 아닌 summary_transposed_no_time [, ** 2 ** : n]이라는 작은 오류가 표시됩니다. – Arault

+0

[1,1]과 [, 1 : n]은 모두 testm1이 colnames() 결과에 나타나지만 프레임을 열 때 눈에 띄지는 않습니다. SAS 개발자로서 새로운 필드가 프레임의 RHS에있을 것이라는 가정을했습니다.이 경우입니까? 그런 말로, 나는 모든 칼럼을 보았고 그것은 분명히 거기 있지 않습니까? –

0

. total_1은 모든 열을 뺀 열 1, total_2는 모든 열 빼기 열 2 등입니다.

n=ncol(summary_transposed_no_time) 

for (h in 1:ncol(summary_transposed_no_time)) { 

    summary_transposed_no_time[,paste0("total_",h)] <- rowSums(summary_transposed_no_time[,c(1:n)][,-h]) 
    m = ncol(summary_transposed_no_time) 
    print(paste("added in a total columns for region", h, "so the column count is now : ",m)) 

} # end for (h in 1:nrow(filtered_data_contents)){ 
관련 문제