Разделите первый ряд на второй ряд R - PullRequest
0 голосов
/ 27 мая 2020

Это простой, но я думаю, что это сложно (по крайней мере, в tidyverse), потому что у меня есть несколько каналов до этого.

Я хочу, чтобы была создана третья строка, которая разделит все числовые c значения с первого в строке со вторым (в процентах) и укажите NA / оставьте поле пустым для значений, отличных от чисел c.

structure(list(date = structure(c(1590105600, 1590537600), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), A = c(106L, 140L), B = c(212L, 
320L), C = c(31L, 26L), D = c(108L, 166L), E = c(93L, 
152L), F = c(550L, 804L)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -2L))

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Если вы ищете решение tidyverse, вы можете попробовать:

library(dplyr)

df %>%
  bind_rows(summarise_if(., is.numeric, ~ .[1] / .[2]))

Вывод:

# A tibble: 3 x 7
  date                      A       B     C       D       E       F
  <dttm>                <dbl>   <dbl> <dbl>   <dbl>   <dbl>   <dbl>
1 2020-05-22 00:00:00 106     212     31    108      93     550    
2 2020-05-27 00:00:00 140     320     26    166     152     804    
3 NA                    0.757   0.662  1.19   0.651   0.612   0.684
2 голосов
/ 27 мая 2020

Использование старого доброго [

df[3, -1] <- df[1, -1] / df[2, -1]
df
#         date           A        B         C           D           E           F
# 1 2020-05-22 106.0000000 212.0000 31.000000 108.0000000  93.0000000 550.0000000
# 2 2020-05-27 140.0000000 320.0000 26.000000 166.0000000 152.0000000 804.0000000
# 3       <NA>   0.7571429   0.6625  1.192308   0.6506024   0.6118421   0.6840796

Использование dplyr::add_rows():

df %>% 
  add_row(.[1, -1] / .[2, -1])

  date                      A       B     C       D       E       F
  <dttm>                <dbl>   <dbl> <dbl>   <dbl>   <dbl>   <dbl>
1 2020-05-22 00:00:00 106     212     31    108      93     550    
2 2020-05-27 00:00:00 140     320     26    166     152     804    
3 NA                    0.757   0.662  1.19   0.651   0.612   0.684 
...