Р: Как прочитать файл в таблицу данных с разными разбиениями? - PullRequest
3 голосов
/ 14 октября 2019

У меня есть файл данных, который выглядит следующим образом:

ABC 123456789
DEF 987654321
GHI 123456789

Я хочу поместить это в таблицу данных (в R) следующим образом:

ABC 1 2 3 4 5 6 7 8 9
DEF 9 8 7 6 5 4 3 2 1
GHI 1 2 3 4 5 6 7 8 9

Итак,ABC вместе в одном столбце и numbers каждый в отдельных столбцах.

Я знаю, как разделить данные, и, конечно, числа должны быть разделены на ''. Но я не знаю, как использовать это в этом случае, потому что я не хочу разбивать весь файл на '';только второй «столбец» с цифрами.

Кто-нибудь может мне это объяснить?

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Мы можем использовать некоторые регулярные выражения и read.table следующим образом. Можно также использовать read.csv. Дело в том, чтобы ввести разделитель запятых, а затем использовать его для чтения в данных. См. Примечания ниже:

res <- read.table(text=gsub("([0-9])()","\\1,","ABC 123456789
 DEF 987654321
 GHI 123456789"), sep = ",")[-10]
 library(dplyr) # Just the pipe
 res %>% 
   tidyr::separate(V1,c("ROW","FIRST"))
  ROW FIRST V2 V3 V4 V5 V6 V7 V8 V9
1 ABC     1  2  3  4  5  6  7  8  9
2 DEF     9  8  7  6  5  4  3  2  1
3 GHI     1  2  3  4  5  6  7  8  9

Примечание

  1. Мы можем обойтись без separate, используя гораздо более общее регулярное выражение в нашем gsub.
  2. Мы также можем вручную удалить ненужные столбцы после прочтения, следовательно, удалив [-10], использованный выше. Возможно, что кто-то может не знать длину, в этом случае str может быть полезным.
1 голос
/ 14 октября 2019

Просто прочитайте в исходном файле и затем используйте strsplit во втором столбце, чтобы сгенерировать нужные столбцы:

df <- data.frame(v1=c("ABC", "DEF"),
                 v2=c("1234", "5678"), stringsAsFactors=FALSE)
df <- data.frame(cbind(df$v1, t(apply(df, 1, function(x) strsplit(x[2], "", fixed=TRUE)[[1]]))))
df

   X1 X2 X3 X4 X5
1 ABC  1  2  3  4
2 DEF  5  6  7  8

Это предполагает, что ваш входной файл выглядел следующим образом:

ABC 1234
DEF 5678
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...