Данные, которые у меня есть, выглядят так:
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
))