我需要在一列R数据帧中插入一些缺失的断路器。数据收集阶段缺少这些断路器。
数据如下:
V1
Apple
OrangeBanana
BananaBananaBanana
Watermelon
GrapeBanana
因此“香蕉”之前的所有断路器都缺失了
我想搜索“Banana”并添加缺少的断路器,看起来像:
V1
Apple
Orange
Banana
Banana
Banana
Banana
Watermelon
Grape
Banana
答案 0 :(得分:3)
这是一个稍微更通用的解决方案,但可以轻松地用于明确使用“Banana”。
V1 <- c("Apple", "OrangeBanana", "BananaBananaBanana", "Watermelon", "GrapeBanana")
首先,让我们通过找到所有不是单词边界的大写字母并用空格和大写字母替换它们来拆分它们:
splits <- gsub("(?:\\B)([[:upper:]])"," \\1" , V1, perl=TRUE)
[1] "Apple" "Orange Banana" "Banana Banana Banana" "Watermelon" "Grape Banana"
然后用空格字符分割并从列表转换为向量:
unlist(strsplit(splits, " "))
[1] "Apple" "Orange" "Banana" "Banana" "Banana" "Banana" "Watermelon" "Grape" "Banana"
或者在一行中:
unlist(strsplit(gsub("(?:\\B)([[:upper:]])"," \\1" , V1, perl=TRUE), " "))
编辑:对于明确使用“Banana”的正则表达式:
gsub("(?:\\B)(Banana)"," \\1" , V1, perl=TRUE)