2016-04-28 19 views
2

"nasal_coronal"と "coronal"のようなデータフレームがあり、 "nasal_"を取り除き、 "nasal_coronal"と "coronal" "別の列に基づいて新しい列を作成するR

data.df$nasal <- grep("^nasal", data$type, value = TRUE)を最初に使用しようとしましたが、置換によってデータセットよりも行が少なくなるというエラーが表示されます。

ミニデータセットを作成するコードは次のとおりです。私たちは「タイプ」列には、nasal_を持っていた示して列を作成する必要がある場合はその後subを使用してgrepすなわち

data.df$initType <- grepl("nasal_", data.df$type) 

type <- c("nasal_coronal", "nasal_coronal", "coronal") 
word <- c("something", "walk", "thing") 

data.df <- data.frame(word, type) 
+0

grepではなくgsubコマンドを使用してください。 grepは検索のみを実行します。 gsubは置換を使用して検索を実行し、元のベクトルと同じ長さのベクトルを返します。 – Dave2e

答えて

1

、我々が使用することができ、我々はのために_までの文字に一致する部分文字列を削除します「タイプ」欄

data.df$type <- sub('.*_', '', data.df$type) 
+0

あなたの答えをありがとう!私は 'data.df $ nasal < - gsub( '。* _'、 ''、data.df $ type)'を使用しましたが、これはちょうど "コロナル"と言う列を作成します。私はまた、タイプがもともと "nasal_coronal"であったかどうかを示す追加の鼻腔柱を作成する必要があります。これは可能ですか? – Lisa

+0

@Lisa投稿を更新しました。私はタイプに 'nasal_'部分文字列があるかどうかを示すための論理的な列が必要だと思います。 – akrun

1

は、次のようにデータフレームの列を削除/追加:

df <- data.frame(1:5, 21:25, 31:35) 
colnames(df) <-c("A","B","C") 

df 

A B C 
1 1 21 31 
2 2 22 32 
3 3 23 33 
4 4 24 34 
5 5 25 35 

# delete column "B": 
df$B <-NULL 

df 

df 
A C 
1 1 31 
2 2 32 
3 3 33 
4 4 34 
5 5 35 

# add new column "extra": 

df$extra <-rnorm(1:5) 

A C  extra 
1 1 31 0.6739996 
2 2 32 1.0011144 
3 3 33 -0.1595998 
4 4 34 0.5696583 
5 5 35 -0.4564025 
関連する問題