Как разбить датафрейм в R - PullRequest
       10

Как разбить датафрейм в R

0 голосов
/ 29 января 2019

У меня есть 10 x 1 фрейм данных, где каждая ячейка содержит 10 чисел, разделенных пустым пространством.Как бы я разделил этот фрейм данных, чтобы получить одно число на ячейку (т. Е. 10 х 10 фрейм данных)?Я пробовал с разделением и отдельными функциями, но безуспешно.Спасибо

Мои данные:

structure(list(x = structure(1:2, .Label = c("668 1.000 1 14.8876 1 3.474638 3.5887 0.2150 0.348 -0.110 0.992 1 27.7460 1 20.4108 1 6.722 1 112.68000 0", 
"686 1.500 1 14.9045 1 3.475565 3.5868 0.3391 -0.064 0.115 1.487 1 27.7420 1 20.4042 1 6.722 1 112.71500 0"
), class = "factor")), class = "data.frame", row.names = c(NA, 
-2L))

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Мы можем попробовать separate из tidyr:

library(tidyr)
separate(df, 1, paste0("Col", 1:10), sep = "\\s+", convert = TRUE)

При convert = TRUE все выходные столбцы преобразуются в числовой тип.

Вывод:

     Col1 Col2   Col3    Col4    Col5     Col6   Col7   Col8    Col9  Col10
1 668.000  1.0  1.000 14.8876  1.0000 3.474638 3.5887 0.2150   0.348 -0.110
2   0.992  1.0 27.746  1.0000 20.4108 1.000000 6.7220 1.0000 112.680  0.000
3 686.000  1.5  1.000 14.9045  1.0000 3.475565 3.5868 0.3391  -0.064  0.115
4   1.487  1.0 27.742  1.0000 20.4042 1.000000 6.7220 1.0000 112.715  0.000

Данные:

df <- data.frame(x = c("668 1.000 1 14.8876 1 3.474638 3.5887 0.2150 0.348 -0.110", 
                       "0.992 1 27.7460 1 20.4108 1 6.722 1 112.68000 0", 
                       "686 1.500 1 14.9045 1 3.475565 3.5868 0.3391 -0.064 0.115", 
                       "1.487 1 27.7420 1 20.4042 1 6.722 1 112.71500 0"))
0 голосов
/ 29 января 2019

С помощью функции separate() вы можете указать имена новых столбцов и разделитель.

library(tidyverse)
df = data.frame(col1 = c('668 1.000 1 14.8876 1 3.474638'))
df %>% separate('col1', c('a1', 'a2', 'a3', 'a4', 'a5', 'a6'), sep = ' ')

   a1    a2 a3      a4 a5       a6
1 668 1.000  1 14.8876  1 3.474638
0 голосов
/ 29 января 2019

Мы можем использовать read.table из base R для разделения столбца («Столбец» - измените его на фактическое имя столбца и имя объекта ('df1'))

df2 <- read.table(text = as.character(df$x), header = FALSE)
df2
#       V1  V2     V3      V4      V5       V6     V7     V8      V9    V10
#1 668.000 1.0  1.000 14.8876  1.0000 3.474638 3.5887 0.2150   0.348 -0.110
#2   0.992 1.0 27.746  1.0000 20.4108 1.000000 6.7220 1.0000 112.680  0.000
#3 686.000 1.5  1.000 14.9045  1.0000 3.475565 3.5868 0.3391  -0.064  0.115
#4   1.487 1.0 27.742  1.0000 20.4042 1.000000 6.7220 1.0000 112.715  0.000

data

df <- structure(list(x = structure(c(3L, 1L, 4L, 2L), 
.Label = c("0.992 1 27.7460 1 20.4108 1 6.722 1 112.68000 0", 
"1.487 1 27.7420 1 20.4042 1 6.722 1 112.71500 0", 
"668 1.000 1 14.8876 1 3.474638 3.5887 0.2150 0.348 -0.110", 
"686 1.500 1 14.9045 1 3.475565 3.5868 0.3391 -0.064 0.115"), 
class = "factor")), class = "data.frame", row.names = c(NA, 
-4L))
...