1

フォームのデータ フレームに因子変数があります735-739

(min, mean, max)これを 3 つの数値列としてデータ フレーム に追加したいと考えています。

私は使用することから始めていstrsplitます:

values = sapply(range, function(r) {
    values = c(strsplit(as.character(r), "-"))
})

list長さ 1のクラスの値が返されます。

[1] "735" "739"

次のステップがどうあるべきか途方に暮れています。ヒントをいただければ幸いです。

4

2 に答える 2

1

これを行うにはいくつかの方法があります。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

まず、「vals」列を分割し、必要に応じて名前を変更し ( を使用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
于 2013-11-10T03:14:31.453 に答える
1

@AnandraMahto のデータセットを使用すると、data.tableライブラリを使用することもできます-

library(data.table)
dt <- data.table(ID = LETTERS[1:3], vals = c("700-800", "600-750", "100-220"))

# adding the min and max columns
splitlist <- strsplit(dt[,vals],"-")
dt[, minv := as.numeric(sapply(X = splitlist, function(x) x[1]))]
dt[, maxv := as.numeric(sapply(X = splitlist, function(x) x[2]))]

#adding mean
dt[,meanv := mean(minv:maxv), by = "vals"]
于 2013-11-10T03:25:53.887 に答える