2017-04-13 5 views
0

データフレームが与えられたら、strsplitを私の列の1つに使用して、ベクトルの最初の要素を返します。次に例を示します。サプリー関数の出力をサブセット化する方法

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

関連する問題