2012-11-22 20 views
1

我需要在一列R数据框中插入一些缺失的断路器。数据收集阶段缺少那些线路断路器。如何在R数据框中插入缺少的断路器

的数据是这样的:

V1 
Apple 
OrangeBanana 
BananaBananaBanana 
Watermelon 
GrapeBanana 

所以所有的“香蕉”之前的线路断路器缺少

我想搜索“香蕉”,并添加那些缺失的线路断路器所以它看起来像:

V1 
Apple 
Orange 
Banana 
Banana 
Banana 
Banana 
Watermelon 
Grape 
Banana 

回答

3

下面是一个稍微更一般的解决方案,但可以很容易地用于明确使用“香蕉”。

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), " ")) 

编辑:对于以 “香蕉” 的作品明确一个正则表达式:

gsub("(?:\\B)(Banana)"," \\1" , V1, perl=TRUE) 
+0

非常感谢!这很好! – jinlong