Как выбрать значение c и вставить его в файл Excel? - PullRequest
0 голосов
/ 13 марта 2020

У меня есть небольшая проблема, которая, я уверен, вы могли бы помочь! С простым фреймом данных

            id     VO2  PETCO2     QC percent_power group
1  AC12-PRD-C1 0.73900 39.2925  8.025      21.73913   CHD
2  AC12-PRD-C1 0.81975 39.6200  8.050      34.78261   CHD
3  AC12-PRD-C1 0.95125 41.4100  9.175      47.82609   CHD
4  AC12-PRD-C1 1.07525 42.0150 10.025      60.86957   CHD
5  AC12-PRD-C1 1.19900 41.8425 11.225      73.91304   CHD
6  AC12-PRD-C1 1.34575 41.0950 12.550      86.95652   CHD
7  AC12-PRD-C1 1.49775 40.7275 13.950     100.00000   CHD
8  AL13-PRD-C1 0.66125 31.2275  7.175      19.23077   CHD
9  AL13-PRD-C1 0.74850 32.1025  7.775      30.76923   CHD
10 AL13-PRD-C1 0.85500 33.6650  9.075      42.30769   CHD
11 AL13-PRD-C1 0.98450 34.5325 10.425      53.84615   CHD
12 AL13-PRD-C1 1.14950 34.4225 12.150      65.38462   CHD
13 AL13-PRD-C1 1.34650 33.1800 12.775      76.92308   CHD
14 AL13-PRD-C1 1.45100 32.6450 14.100      88.46154   CHD
15 AL13-PRD-C1 1.59850 30.9000 15.575     100.00000   CHD
16 BM06-PRD-S1 0.61675 37.6425  9.125      25.00000 Sains
17 BM06-PRD-S1 0.71700 39.2175  9.700      40.00000 Sains
18 BM06-PRD-S1 0.86275 41.2150 10.575      55.00000 Sains
19 BM06-PRD-S1 0.98575 41.7050 11.925      70.00000 Sains
20 BM06-PRD-S1 1.13000 41.1425 11.900      85.00000 Sains
21 BM06-PRD-S1 1.26200 38.8925 13.175     100.00000 Sains
22 CB19-PRD-S1 0.88350 40.7550  8.150      13.15789 Sains
23 CB19-PRD-S1 0.94575 41.4675  8.900      21.05263 Sains
24 CB19-PRD-S1 1.08125 42.2775  8.875      28.94737 Sains
25 CB19-PRD-S1 1.24400 42.6450 10.500      36.84211 Sains
26 CB19-PRD-S1 1.30475 43.3600 10.500      44.73684 Sains
27 CB19-PRD-S1 1.47350 44.2650 11.525      52.63158 Sains
28 CB19-PRD-S1 1.67900 44.6400 11.875      60.52632 Sains
29 CB19-PRD-S1 1.79075 44.3425 12.100      68.42105 Sains
30 CB19-PRD-S1 1.96000 44.7300 12.725      76.31579 Sains
31 CB19-PRD-S1 2.04050 43.8825 13.300      84.21053 Sains
32 CB19-PRD-S1 2.34425 41.6025 13.775      92.10526 Sains
33 CB19-PRD-S1 2.44350 40.0400 15.825     100.00000 Sains
34 CC14-PRD-S1 0.59250 37.7175  8.100      22.22222 Sains
35 CC14-PRD-S1 0.66100 38.5800  8.175      33.33333 Sains
36 CC14-PRD-S1 0.74350 39.2950  8.475      44.44444 Sains
37 CC14-PRD-S1 0.87875 40.5650 10.050      55.55556 Sains
38 CC14-PRD-S1 0.94350 41.3525 10.675      66.66667 Sains
39 CC14-PRD-S1 0.99675 42.7575 11.225      77.77778 Sains
40 CC14-PRD-S1 1.11425 42.5025 11.925      88.88889 Sains
41 CC14-PRD-S1 1.20275 42.0975 12.200     100.00000 Sains

И я хотел бы выбрать конкретное значение c в столбце PETCO2 со значением, ближайшим к 30% в столбце percent_power для каждого id и вставьте его в файл Excel с 2 столбцами CHD и sains.

Я думаю, что должен использовать функцию slice, но не уверен, как ее использовать.

Надеюсь, вы мог бы помочь мне. спасибо!

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Мы можем group_by id и выбрать ближайший ряд к percent_power как 30.

library(dplyr)

df1 <- df %>% group_by(id) %>% slice(which.min(abs(percent_power - 30)))
df1

#  id          PETCO2 percent_power group
#  <fct>        <dbl>         <dbl> <fct>
#1 AC12-PRD-C1   39.6          34.8 CHD  
#2 AL13-PRD-C1   32.1          30.8 CHD  
#3 BM06-PRD-S1   37.6          25   Sains
#4 CB19-PRD-S1   42.3          28.9 Sains

Если вы хотите записать его в CSV, мы можем затем сделать

write.csv(df1, 'file.csv', row.names = FALSE)
0 голосов
/ 13 марта 2020

После группировки по 'id', slice строка, в которой процентная мощность близка к 30, затем преобразуется в широкоформатный формат с помощью pivot_wider

library(dplyr)
library(tidyr)
df1 %>% 
   group_by(id)  %>%
   slice(findInterval(30, percent_power) + 1) %>%
   ungroup %>%
   pivot_wider(names_from = group, values_from = c(PETCO2, percent_power))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...