数据帧将每一行除以其索引

时间:2018-08-20 10:01:05

标签: r dataframe

我有一个包含几行的数据框,我希望将其每一行除以其索引。例如,我有:

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

3 个答案:

答案 0 :(得分:6)

最简单的多种方法

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

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

答案 1 :(得分:3)

出于完整性考虑。您可以尝试。

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)

答案 2 :(得分:1)

使用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