найти односимвольный элемент в r и объединить их, если они непрерывны - PullRequest
1 голос
/ 15 июня 2019

У меня большой фрейм данных, мне нужно найти односимвольный элемент в строке и объединить их, если они непрерывны. Например:

v1    v2      v3    v4    v5    v6    v7    v8
m     i       l     k     200   gr.   low   fat
C     H       e     e     s     e     200   gr.
milk  l       o     w     fat   1.5   liter 0%

Я хочу изменить это на:

v1     v2       v3    v4     v5    v6
milk   200      gr.   low    fat   NA
cheese 200      gr.   NA     NA    NA
milk   low      fat   1.5    Liter 0%

и было бы очень полезно, если бы вы могли предложить способ, который я мог бы реализовать на больших данных.

1 Ответ

1 голос
/ 15 июня 2019

С помощью nchar вы можете обнаружить ячейки с одним символом и комбинировать их с paste в строке apply. Используйте unname, чтобы получить более четкий вывод.

apply(d, 1, function(x) {
  unname(c(paste(x[which(nchar(x) == 1)], collapse=""), x[which(nchar(x) != 1)]))
  })
# [[1]]
# [1] "milk" "200"  "gr."  "low"  "fat" 
# 
# [[2]]
# [1] "CHeese" "200"    "gr."   
# 
# [[3]]
# [1] "low"   "milk"  "fat"   "1.5"   "liter" "0%" 

Данные

d <- structure(list(v1 = c("m", "C", "milk"), v2 = c("i", "H", "l"
), v3 = c("l", "e", "o"), v4 = c("k", "e", "w"), v5 = c("200", 
"s", "fat"), v6 = c("gr.", "e", "1.5"), v7 = c("low", "200", 
"liter"), v8 = c("fat", "gr.", "0%")), row.names = c(NA, -3L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...