2016-04-28 142 views
2

我有一個數據框,有像「nasal_coronal」和「coronal」,我想擺脫「nasal_」,並創建一個新的列標記爲「nasal 「基於另一列創建一個新列R

我最初試圖使用這樣的grep()data.df$nasal <- grep("^nasal", data$type, value = TRUE)但是,R給我的錯誤是,替換的行比數據集少。

下面是創建迷你數據集的代碼。

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

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

您應該使用gsub命令而不是grep。 grep僅執行搜索。 gsub將執行帶替換的搜索並返回一個與原始矢量長度相同的矢量。 – Dave2e

回答

1

如果我們需要創建一個列,表示「類型」列有nasal_,我們grep

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

然後使用sub可以使用,我們刪除了匹配的字符,直到_子串'type'列

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

謝謝你的回答!我使用了'data.df $ nasal < - gsub('。* _','',data.df $ type)',但這只是一個只顯示「冠狀」的列。我還需要製作一個額外的鼻腔專欄,指出該類型最初是否是「鼻腔冠狀」。這可能嗎? – 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