разделение строк данных на новый столбец на основе символа и выполнение вычислений - PullRequest
0 голосов
/ 04 августа 2020

Данные, которые у меня есть, выглядят так:

     grp  grp2                                                         figures
1   7347 10506 0.60 - 0.64\n0.20 - 0.22\n0.40 - 0.42\n0.20 - 0.22\n0.40 - 0.42
2   1903  3050                                        1.55 - 1.75\n1.50 - 1.70
3   3228  4872                                        5.42 - 5.57\n5.42 - 5.67
4    178   216                                     152-154\n2.20-2.25\n630-640
5   2142  3369                                                     0.62 - 0.66
6   9519 12996                                        0.48 - 0.52\n0.38 - 0.42
7   1877  3009                                          6.10 - 6.30\n500 - 550
8   6311  4483                                        2.50 - 2.85\n2.35 - 2.85
9  10380 13886 1.13 - 1.15\n1.35 - 1.37\n14.5 - 14.7\n3.70 - 3.76\n5.52 - 5.58
10 10164 13746                                                     5.40 - 5.50

Где столбец figures содержит числа, которые находятся в разных строках (разделенные \n). Я бы хотел:

  • Разделить столбец figures на новый столбец min / max на основе символа -.
  • Возьмите разница между значениями min и max. Итак, первые две строки будут выглядеть так:

Output1:

введите описание изображения здесь

(не знаю, почему, но мне не удалось получить правильное форматирование для этой таблицы, поэтому я загрузил снимок экрана)

Output2:

(что похоже на выше, но данные были распределены по n столбцам). Таким образом, вместо одного столбца min он содержит, например, min1, min2 ... minN.

     grp  grp2                                                         figures      min1    max1   diff1  min2    max2   diff2  min3    max3   diff3  min4    max4   diff4  min5    max5   diff5
1   7347 10506 0.60 - 0.64\n0.20 - 0.22\n0.40 - 0.42\n0.20 - 0.22\n0.40 - 0.42      0.60    0.64  0.04    0.20    0.22  0.02    0.40    0.42  0.02    0.20    0.22  0.02    0.40    0.42  0.02
                                                                                    
                                                                                   
                                                                                    
                                                                                   
2   1903  3050                                        1.55 - 1.75\n1.50 - 1.70      1.55    1.75  0.10    1.50    1.70  0.20
   

Данные:

structure(list(grp = c("7347", "1903", "3228", "178", "2142", 
"9519", "1877", "6311", "10380", "10164"), grp2 = c(10506L, 3050L, 
4872L, 216L, 3369L, 12996L, 3009L, 4483L, 13886L, 13746L), figures = c("0.60 - 0.64\n0.20 - 0.22\n0.40 - 0.42\n0.20 - 0.22\n0.40 - 0.42", 
"1.55 - 1.75\n1.50 - 1.70", "5.42 - 5.57\n5.42 - 5.67", "152-154\n2.20-2.25\n630-640", 
"0.62 - 0.66", "0.48 - 0.52\n0.38 - 0.42", "6.10 - 6.30\n500 - 550", 
"2.50 - 2.85\n2.35 - 2.85", "1.13 - 1.15\n1.35 - 1.37\n14.5 - 14.7\n3.70 - 3.76\n5.52 - 5.58", 
"5.40 - 5.50")), class = "data.frame", row.names = c(NA, -10L
))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...