применить strsplit к определенному столбцу в data.frame - PullRequest
10 голосов
/ 13 октября 2011

У меня большой массив данных с классификационной информацией.Вот пример:

> d <- data.frame(x = c(1,2,3,4), classification = c("cl1.scl1", "cl2", "cl3-bla", "cl4.subclass2"))
> d
  x classification
1 1       cl1.scl1
2 2            cl2
3 3        cl3-bla
4 4  cl4.subclass2

Прежде чем приступить к дальнейшей обработке, мне нужно собрать информацию о классификации, что означает, что я должен разделить строки классификации на "."и возьми первый жетон.Вот результат, который мне нужен:

> d
  x classification
1 1            cl1
2 2            cl2
3 3        cl3-bla
4 4            cl4

На данный момент я вычисляю это следующим образом:

d$classification = unlist(lapply(d$classification, function (x) strsplit(as.character(x), ".", fixed=TRUE)[[1]][1]))

Это работает, но мне потребовалось довольно много времени, чтобы понять это.Я предполагаю, что есть более элегантное решение, которое я, вероятно, пропустил.Какие-либо предложения?Спасибо!

Ответы [ 3 ]

12 голосов
/ 13 октября 2011

Немного более короткое решение -

sapply(strsplit(as.character(d$class), "\\."), `[`, 1)
4 голосов
/ 13 октября 2011

Вы можете использовать регулярные выражения с обратными ссылками.

gsub("(.*)\\.(.*)","\\1",d$classification)

Есть 2 ссылки (части регулярного выражения в скобках), разделенные литеральным периодом. Мы заменяем все, что соответствует этому шаблону, содержимым первой ссылки.

2 голосов
/ 13 октября 2011

Просто удалите материал, который следует за "."

> sub("\\..+$", "", d$class)
[1] "cl1"     "cl2"     "cl3-bla" "cl4"  

d$classification <-  sub("\\..+$", "", d$classification)
 # I've never been very comfortable with partial name matching.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...