2016-04-28 140 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