如果我有与此类似的矩阵:
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),但并非所有分组都将仅基于属进行分组,并且可能必须合并。我只对少数物种感兴趣,可以进行此分析,而不一定需要它来返回所有物种。在此示例中,我们对“狗”和“猫”不感兴趣,如果可以简化操作,可以将它们删除。
答案 0 :(得分:2)
如果您的新列与第一列一样,但是在空格后面加上了大写字母(例如“ 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
答案 1 :(得分:1)
我们可以使用str_remove
library(dplyr)
library(stringr)
Data %>%
as_tibble %>%
mutate(V1_new = str_remove(V1, "\\s+[A-Z]$"))
答案 2 :(得分:1)
其他解决方案
Data %>%
as_tibble() %>%
tidyr::extract(V1, "out", remove = F)