有幾種方法可以做到這一點。下面是一個開始concat.split.multiple
從我的「splitstackshape」套餐:
## SAMPLE DATA
mydf <- data.frame(ID = LETTERS[1:3], vals = c("700-800", "600-750", "100-220"))
mydf
# ID vals
# 1 A 700-800
# 2 B 600-750
# 3 C 100-220
首先,拆分「丘壑」一欄,如果(使用setnames
)需要對其進行重命名,並與rowMeans
添加新列。
library(splitstackshape)
mydf <- concat.split.multiple(mydf, "vals", "-")
setnames(mydf, c("vals_1", "vals_2"), c("min", "max"))
mydf$mean <- rowMeans(mydf[c("min", "max")])
mydf
# ID min max mean
# 1 A 700 800 750
# 2 B 600 750 675
# 3 C 100 220 160
僅供參考,這裏有一個更 「通過手」 的方法:
mydf <- data.frame(ID = LETTERS[1:3], vals = c("700-800", "600-750", "100-220"))
SplitVals <- sapply(sapply(mydf$vals, function(x)
strsplit(as.character(x), "-")), function(x) {
x <- as.numeric(x)
c(min = x[1], mean = mean(x), max = x[2])
})
cbind(mydf, t(SplitVals))
# ID vals min mean max
# 1 A 700-800 700 750 800
# 2 B 600-750 600 675 750
# 3 C 100-220 100 160 220
什麼你的數據框看起來像什麼?一個[可重現的例子](http://stackoverflow.com/q/5963269/)會有所幫助。 'dput(head(...))' –