r-基于字符创建新列



如果我有一个类似的矩阵:

Data = matrix(
c('Ruppia A', 'Ruppia B', 'Ruppia C', 'Hydrobia A', 'Dog A', 'Cat A', 'Fresh',
'Fresh', 'Fresh','Fresh', 'Dirt', 'House'),
nrow=6,
ncol=2,
byrow=FALSE
)

我希望能够将类似的记录组合到一列中,而不会丢失任何数据。类似这样的东西:

New_Data = matrix(
c('Ruppia A', 'Ruppia B', 'Ruppia C', 'Hydrobia A', 'Dog A', 'Cat A', 'Fresh',
'Fresh', 'Fresh','Fresh', 'Dirt', 'House', 'Ruppia', 'Ruppia', 'Ruppia',
'Ruppia', 'Dog', 'Cat'),
nrow=6,
ncol=3,
byrow=FALSE
)

对于一些记录,我们可以简单地脱离属(Ruppia(,但并非所有的分组都将仅基于属进行分组,并且可能必须组合。我只对少数物种感兴趣,不一定需要它来返回所有物种。在这个例子中,我们对"狗"one_answers"猫"不感兴趣,如果这更容易的话,它们可能会被丢弃。

如果你的新列和你的第一列一样,但在空格后面有一个大写字母(例如"a"(,那么你可以简单地这样做:

Data <- as.data.frame(Data) # turn into data frame first
Data %>% mutate(V1_new = gsub(" [A-Z]$", "", V1))
V1    V2   V1_new
1   Ruppia A Fresh   Ruppia
2   Ruppia B Fresh   Ruppia
3   Ruppia C Fresh   Ruppia
4 Hydrobia A Fresh Hydrobia
5      Dog A  Dirt      Dog
6      Cat A House      Cat

我们可以使用str_remove

library(dplyr)
library(stringr)
Data %>%
as_tibble %>%
mutate(V1_new = str_remove(V1, "\s+[A-Z]$"))

附加解决方案

Data %>% 
as_tibble() %>% 
tidyr::extract(V1, "out", remove = F)

最新更新