如果我有这个数据集
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中这样做,所以我不需要预处理数据?
答案 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)