Tengo un marco de datos compuesto solo por varias columnas de volumen y quiero crear una columna total llamada prueba que se encuentra en el marco de datos. El siguiente código funcionará si solo configuro test <- ... pero si agrego summary_transposed_no_time$ a la izquierda, el código no parece agregarlo al marco de datos.

También me gustaría saber cómo podría evolucionar este fragmento de código para poder crear la prueba para que sean todas las columnas menos la columna 1, y luego en el proceso crear otra columna de prueba (tal vez llamada prueba2) que sería una suma de todas columnas menos la columna 2: puedo codificar las posiciones de las columnas pero no los nombres de las columnas (ya que pueden cambiar en la convención de nomenclatura cada vez que se ejecuta el código), por lo que no las he incluido aquí

w <- ncol(summary_transposed_no_time)
summary_transposed_no_time$test <- apply(summary_transposed_no_time[,c(1:w)], 1, sum)

Ejemplo de 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

Columnas de resultados deseadas dentro de 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
r
0
Joel B 13 ago. 2016 a las 10:51

2 respuestas

La mejor respuesta

Debe proporcionar un ejemplo reproducible. Pero si su pregunta es realmente sobre cómo hacer sumas de filas, preferiría usar la función incorporada rowSums. Tu código sería:

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]
1
Arault 13 ago. 2016 a las 11:22

Descubrí cómo crear un "total_" para cada columna dentro del df. total_1 es la suma de todas las columnas menos la columna 1, total_2 la suma de todas las columnas menos la columna 2, etc.

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)){
0
Joel B 14 ago. 2016 a las 16:13