在r中找到一个字符的元素,如果它们是连续的,则将它们合并

时间:2019-06-15 06:36:09

标签: r

我有一个大数据框,我需要连续查找一个字符元素,如果它们是连续的,则将它们组合起来,例如:

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 个答案:

答案 0 :(得分:1)

使用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")