2017-04-13 41 views
0

给定一个数据框,我想在我的一列上使用strsplit,并返回矢量的第一个元素。这里是例子:如何子集一个sapply函数输出

testdf<- data.frame(col1= c('string1.string2', 'string3.string4'), 
        col2= c('somevalue', 'someothervalue'), 
        stringsAsFactors = FALSE) 

我要生成一个新的列如 testdf$col3 <- c('string1', 'string3')

我试过如下:

testdf$col3<- strsplit(testdf$col1, split = '\\.')[[1]])[1] 

其中,当然,不能正常工作。它仅返回输出的第一个元素('string1')并将其写入整个列。 一个解决办法是写一个自定义函数:

customfx<- function(ind_cell){ 
my_out<- strsplit(ind_cell, split = '\\.')[[1]][1] 
return(my_out)} 

然后用sapply使用它。我想知道是否有替代方案。会说话的棍子是你的:)

+0

编辑示例以阐明所需输出 – madmaxthc

+1

使用'testdf $ col3 < - sapply(strsplit(testdf $ col1,split ='\\。'),\'[''1)' – MrFlick

+1

'tidyr :: separate' – HubertL

回答

2

您可以使用sub(这是矢量)与正则表达式此:

testdf$col3 <- sub("^([^.]+).*", "\\1", testdf$col1) 

testdf 
#    col1   col2 col3 
#1 string1.string2  somevalue string1 
#2 string3.string4 someothervalue string3 

这里使用^([^.]+).*整个字符串匹配和捕获从一开始直到子满足一个点,然后用反向引用替换整个字符串与捕获的组。

+1

我很感谢你加入解释,这是我经常需要的东西:) – madmaxthc

相关问题