0

私は次のタスクを持っています

Treatment$V010 <- as.numeric(substr(Treatment$V010,1,2))
Treatment$V020 <- as.numeric(substr(Treatment$V020,1,2))
[...]
Treatment$V1000 <- as.numeric(substr(Treatment$V1000,1,2))

$V010、$V020、$V030... から $V1000 までの 100 個の変数があります。それらは異なる長さの数字です。数字の最初の 2 桁だけを「抽出」し、古い数字を 2 桁の新しい数字に置き換えたいと考えています。

私のデータ フレーム「治療」には、ここでは言及していない 80 個の変数が含まれているため、この関数を言及した 100 個の変数に適用することが私の目標です。

どうやってやるの?そのコマンドを100回書くことができましたが、もっと良い解決策があると確信しています.

4

2 に答える 2

1

正規表現で記述できるパターンに基づいて、関連する列が選択されるソリューション。

正規表現の説明:
^: 文字列の開始
V: リテラル V
\\d{2}: ちょうど 2 桁

Treatment <- data.frame(V010 = c(120, 130), x010 = c(120, 130), xV1000 = c(111, 222), V1000 = c(111, 222))
Treatment
#   V010 x010 xV1000 V1000
# 1  120  120    111   111
# 2  130  130    222   222

# columns with a name that matches the pattern (logical vector)
idx <- grepl(x = names(Treatment), pattern = "^V\\d{2}")

# substr the relevant columns
Treatment[ , idx] <- sapply(Treatment[ , idx], FUN = function(x){
  as.numeric(substr(x, 1, 2))
  })

Treatment
#   V010 x010 xV1000 V1000
# 1   12  120    111    11
# 2   13  130    222    22
于 2013-10-13T17:48:20.840 に答える