#r
#r
Вопрос:
У меня есть df, которые содержат длинные строки. Если я хочу разделить ее на разные переменные, как мне это сделать?
пример данных здесь:
df <- structure(list(tx = c(" [1] Timepoint EGTMPT Categorical select one (nominal) 51 Screening",
" [2] N/A : O ff-Study EGTNA Categorical yes/no (dichotomous) 3",
" [3] Check if Not Done EGTMPTND Categorical yes/no (dichotomous) 3",
" [4] Date Performed ECGDT Date 11",
" [5] Time (24-hour format) ECGTM Time 5",
" [6] O verall ECG Interpretation ECGRES Categorical select one (nominal) 37 Normal"
)), row.names = c(NA, 6L), class = "data.frame")
Комментарии:
1. используйте
separate
изtidyr
Ответ №1:
Кажется, что переменные занимают фиксированное пространство, поэтому, чтобы найти эти пробелы, мы делаем следующее:
Вручную отделите одну строку:
vars = c(" [1] ", "Timepoint ", "EGTMPT ",
"Categorical select one (nominal) ", "51 ", "Screening")
Подсчитайте количество символов в каждой переменной:
sizes = numeric(length(vars))
for(i in 1:length(vars)){
sizes[i] = nchar(vars[i])}
Кумулятивно суммируйте эти значения и добавьте 1 (начальную точку) в начале:
sizes = c(1, cumsum(sizes))
Результат:
> sizes
[1] 1 14 62 74 107 118 127
Итак, первая переменная переходит с 1-й на 14-ю позицию и т.д. Теперь нам просто нужно вырезать каждую строку в этих местах:
df2 = character()
for(i in 2:length(sizes)){
df2 = cbind(df2, apply(df, 1, function(x){substr(x, sizes[i-1], sizes[i])}))}
И, наконец, удалите лишние пробелы:
df2 = gsub(" ", "", df2)
Комментарии:
1. Спасибо за предложение. однако оказалось, что это не фиксирует размер столбца в данных. (примерные данные этого не показали), поэтому я думаю заменить
" "
" "
, чтобы я не мог отрезать два пустых места. Есть предложения о том, как этого добиться?2. Я понял вашу проблему, но не ваше предложение, не могли бы вы перефразировать его, пожалуйста?
3. Ну, вы можете использовать pattern = » {1,}», который является пробелом 1 или более раз, но проблема в том, что есть столбец, разделенный только одним пробелом (
...(dichotomous) 3...
) , и в то же время строки, которые не должны разделяться, также имеют только один пробел...Time (24-hour format)...
. Итак, насколько мне известно, не существует применимого шаблона для разделения ваших данных. Это созданный вами набор данных? Если да, то вы можете исправить это в момент создания.