Разделите каждую строку на значение строки определенного столбца

#r

Вопрос:

Я хочу разделить все строки на основе значения строки на определенный столбец (col4) для каждой строки.Есть какие-нибудь предложения о том, как это сделать? Спасибо!

 # declaring dataframe
data_frame <- data.frame(col1 = c(2,4,6), col2 = c(4,6,8), 
                         col3 = c(9,12,15), col4 = c(1,2,3))



    data_frame
col1 col2 col3 col4
2    4    9    1
4    6   12    2
6    8   15    3
 

Желаемый результат:

    col1 col2  col3 col4
    2    4     9    1
    2    3     6    1
    2    2.67  5    1
 

Комментарии:

1. Все, что тебе нужно, это data_frame/data_frame[, 4] .

Ответ №1:

 library(dplyr)
# #Data
data_frame <- data.frame(col1 = c(2,4,6), col2 = c(4,6,8), col3 = c(9,12,15), col4 = c(1,2,3))

data_frame %>% 
  rowwise() %>% 
  mutate(across(everything(), ~ . / col4))
# A tibble: 3 x 4
# Rowwise: 
#   col1  col2  col3  col4
#  <dbl> <dbl> <dbl> <dbl>
#1     2  4        9     1
#2     2  3        6     1
#3     2  2.67     5     1
 

Ответ №2:

rowwise не требуется:

 library(tidyverse)

data_frame <- data.frame(col1 = c(2,4,6), col2 = c(4,6,8), 
                         col3 = c(9,12,15), col4 = c(1,2,3))

data_frame %>% 
  mutate(across(everything(), ~ ./col4))
#>   col1     col2 col3 col4
#> 1    2 4.000000    9    1
#> 2    2 3.000000    6    1
#> 3    2 2.666667    5    1
 

Ответ №3:

В base R :

 data_frame[,1:4] <- sapply(data_frame, function(x) x/data_frame$col4)

data_frame
  col1     col2 col3 col4
1    2 4.000000    9    1
2    2 3.000000    6    1
3    2 2.666667    5    1