首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何删除列中的变量字符?

如何删除列中的变量字符?
EN

Stack Overflow用户
提问于 2018-07-22 22:15:00
回答 2查看 66关注 0票数 0

我正在尝试从数据框中的列中删除附加的"s.#“:

代码语言:javascript
复制
Species <- c("Dogs.1","Dogs.2","Dogs.3","Cats.1","Cats.2","Cats.3")
Breed <- c("Great Dane","Beagle","Beagle","Bengal","Tabby","Siamese")

names(Species) <- "Species"
names(Breed) <- "Breed"

pets <- as.data.frame(cbind(Species,Breed))

这将产生以下数据帧:

代码语言:javascript
复制
  Species      Breed
1  Dogs.1 Great Dane
2  Dogs.2     Beagle
3  Dogs.3     Beagle
4  Cats.1     Bengal
5  Cats.2      Tabby
6  Cats.3    Siamese

我希望输出看起来更像这样:

代码语言:javascript
复制
  Species  Breed
1  Dog     Great Dane
2  Dog     Beagle
3  Dog     Beagle
4  Cat     Bengal
5  Cat     Tabby
6  Cat     Siamese

有没有办法操纵物种列来去掉".#"?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-22 22:17:07

我们可以在这里使用sub。下面的模式将删除一个后跟一个或多个数字的点,作为Species文本中的最后一项内容出现。我还删除了一个可选的字母s,它可能(也可能不)出现在点之前。

代码语言:javascript
复制
pets$Species <- sub("s?\\.\\d+$", "", pets$Species)
pets

  Species      Breed
1     Dog Great Dane
2     Dog     Beagle
3     Dog     Beagle
4     Cat     Bengal
5     Cat     Tabby
6     Cat     Siamese

Demo

票数 1
EN

Stack Overflow用户

发布于 2018-07-23 02:47:14

这是另一个解决方案:

代码语言:javascript
复制
library(stringr)
str_extract(pets$Species, "^.*(?=s)")
[1] "Dog" "Dog" "Dog" "Cat" "Cat" "Cat"

我经常发现,当数据帧是长格式且字符串格式为something.#或something_#时,附加在末尾的#可以保存有价值的信息,这些信息可用于分组、分面、统计和/或数据可视化。我不确定这是不是您的情况,但是这里有一种方法可以将两位信息分开,以保留附加的信息。

代码语言:javascript
复制
library(tidyr)
library(dplyr)
library(stringr)
new_pets <- pets %>%
    separate(col = Species, into = c("type", "owner"), sep = "\\.") %>%
    mutate(type = str_extract(type, "^.*(?=s)"))

new_pets
#   type owner      Breed
# 1  Dog     1 Great Dane
# 2  Dog     2     Beagle
# 3  Dog     3     Beagle
# 4  Cat     1     Bengal
# 5  Cat     2      Tabby
# 6  Cat     3    Siamese
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51465968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档