我有一个包含几行的数据框,我希望将其每一行除以其索引。例如,我有:
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
答案 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