如何创建一个字符串数据列,该列是R中另一列中字符串的转换?

如何创建一个字符串数据列,该列是R中另一列中字符串的转换?,r,R,如果我有这个数据集 Browser Count Chrome/11 100 Chrome/11 89 Chrome/13 10 Safari/12 40 Safari/114 30 我想得到一个没有版本号的更通用的浏览器形式 Browser Clean_Browser Count Chrome/11 Chrome 1

如果我有这个数据集

Browser          Count
Chrome/11         100
Chrome/11         89
Chrome/13         10
Safari/12         40
Safari/114        30      
我想得到一个没有版本号的更通用的浏览器形式

Browser          Clean_Browser       Count
Chrome/11         Chrome              100
Chrome/11         Chrome              89
Chrome/13         Chrome              10
Safari/12         Safari              40 
Safari/114        Safari              30

我知道用python或excel很容易做到这一点,但是有没有办法在R中做到这一点,这样我就不必预处理数据了

这非常简单,因为正则表达式和字符串处理都是矢量化的,所以不需要循环。你可以用

  • gsub()
    等,并用空格替换“/…”

  • 甚至使用带有“/”的
    strsplit
    作为拆分字符,并保留第一个字符

  • 当然,我现在想不出其他方法,经验表明有几种方法会涉及Hadley的软件包:)[开玩笑的话,也看看
    stringr
    软件包]

这里是方法一,在向量上完成,但data.frame中的列是相同的:

R> vec <- c( paste("Chrome", 11:13, sep="/"), paste("Safari", 101:102, sep="/"))
R> vec
[1] "Chrome/11"  "Chrome/12"  "Chrome/13"  "Safari/101" "Safari/102"
R> newvec <- gsub("/.*$", "", vec, perl=TRUE)
R> newvec
[1] "Chrome" "Chrome" "Chrome" "Safari" "Safari"
R> 
R>vec-vec
[1] “Chrome/11”“Chrome/12”“Chrome/13”“Safari/101”“Safari/102”
R> newvec newvec
[1] “Chrome”“Chrome”“Safari”“Safari”
R>

这非常简单,因为正则表达式和字符串处理都是矢量化的,所以不需要循环。你可以用

  • gsub()
    等,并用空格替换“/…”

  • 甚至使用带有“/”的
    strsplit
    作为拆分字符,并保留第一个字符

  • 当然,我现在想不出其他方法,经验表明有几种方法会涉及Hadley的软件包:)[开玩笑的话,也看看
    stringr
    软件包]

这里是方法一,在向量上完成,但data.frame中的列是相同的:

R> vec <- c( paste("Chrome", 11:13, sep="/"), paste("Safari", 101:102, sep="/"))
R> vec
[1] "Chrome/11"  "Chrome/12"  "Chrome/13"  "Safari/101" "Safari/102"
R> newvec <- gsub("/.*$", "", vec, perl=TRUE)
R> newvec
[1] "Chrome" "Chrome" "Chrome" "Safari" "Safari"
R> 
R>vec-vec
[1] “Chrome/11”“Chrome/12”“Chrome/13”“Safari/101”“Safari/102”
R> newvec newvec
[1] “Chrome”“Chrome”“Safari”“Safari”
R>

您可以使用
colsplit
from
reformate
包执行此操作

df = read.table(textConnection(
"Browser          Count
Chrome/11         100
Chrome/11         89
Chrome/13         10
Safari/12         40
Safari/114        30"), sep = "", header = TRUE) 

require(reshape)
browser_version = colsplit(df$Browser, names = c('browser', 'version'), split = '[/]')
df = cbind(df, browser_version)

您可以使用
colsplit
from
reformate
包来执行此操作

df = read.table(textConnection(
"Browser          Count
Chrome/11         100
Chrome/11         89
Chrome/13         10
Safari/12         40
Safari/114        30"), sep = "", header = TRUE) 

require(reshape)
browser_version = colsplit(df$Browser, names = c('browser', 'version'), split = '[/]')
df = cbind(df, browser_version)

非常感谢!请注意,我将assignment包装在factor()语句中以获得字符串分组。mydata$clean_浏览器非常完美,谢谢!请注意,我将assignment包装在factor()语句中以获得字符串分组。mydata$clean_浏览器