У меня есть фрейм данных из нескольких строк, и я бы хотел, чтобы каждая из его строк была разделена на его индекс. Например, у меня есть:

1 10 20 15 23
2 10 20 15 23
3 10 20 15 23
4 10 20 15 23

И я бы хотел получить:

1   10   20   15   23
2    5   10  7.5 11.5
3 3.33 6.66    5 7.66
4  2.5    5 3.75 5.75
1
Oscar 20 Авг 2018 в 13:01

3 ответа

Лучший ответ

Несколько способов сделать это, самый простой будет

df / 1:nrow(df)

#         V1        V2    V3        V4
#1 10.000000 20.000000 15.00 23.000000
#2  5.000000 10.000000  7.50 11.500000
#3  3.333333  6.666667  5.00  7.666667
#4  2.500000  5.000000  3.75  5.750000

A dplyr опция

library(dplyr)
df %>%
  group_by(n = row_number()) %>%
  mutate_all(funs(./n)) %>%
  ungroup() %>%
  select(-n)

#    V1    V2    V3    V4
#  <dbl> <dbl> <dbl> <dbl>
#1 10.0  20.0  15.0  23.0 
#2  5.00 10.0   7.50 11.5 
#3  3.33  6.67  5.00  7.67
#4  2.50  5.00  3.75  5.75
6
Ronak Shah 20 Авг 2018 в 12:33

Для полноты. Вы могли бы попробовать.

df/1:dim(df)[1]

         V2        V3    V4        V5
1 10.000000 20.000000 15.00 23.000000
2  5.000000 10.000000  7.50 11.500000
3  3.333333  6.666667  5.00  7.666667
4  2.500000  5.000000  3.75  5.750000

Другой вариант.

df/seq(length(df))

На основании комментария ниже.

df/row(df)
3
milan 20 Авг 2018 в 10:37

С tidyverse:

read_table(" 10 20 15 23
  10 20 15 23
  10 20 15 23
  10 20 15 23",col_names=F)%>%
   mutate_all(as.numeric)%>%
   mutate_at(vars(X1:X4), .funs =funs( ./row_number()))
# A tibble: 4 x 4
     X1    X2    X3    X4
  <dbl> <dbl> <dbl> <dbl>
1 10.0  20.0  15.0  23.0 
2  5.00 10.0   7.50 11.5 
3  3.33  6.67  5.00  7.67
4  2.50  5.00  3.75  5.75
1
jyjek 20 Авг 2018 в 10:31
51928306