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

时间:2011-09-12 18:38:49

标签: 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              100
Chrome/11         Chrome              89
Chrome/13         Chrome              10
Safari/12         Safari              40 
Safari/114        Safari              30

我知道使用python或excel很容易,但有没有办法在R中这样做,所以我不需要预处理数据?

2 个答案:

答案 0 :(得分:2)

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

  • gsub() et al并用空格替换'/ ...'

  • 甚至使用带有'/'的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> 

答案 1 :(得分:1)

您可以使用colsplit包中的reshape来执行此操作。

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)