1

次のデータを含むデータ フレーム (df) があるとします。

df = data.frame(name=c("David","Mark","Alice"),
income=c("5,000","10,00","$50.55"),
state=c("KS?","FL","CA;"))

このデータフレームからすべての句読点をまとめて削除したい。もちろん、各列を個別のベクトルとして取得し、その上で gsub コマンドを実行することもできますが (以下を参照)、データ フレーム全体のすべての句読点を削除したいと考えています。

gsub("[?.;!¡¿·']", "", df$state)

forループを記述したり、適用関数を使用して各データフレーム列に関数を適用したりせずに、Rでこれを指定する方法はありますか?

4

2 に答える 2

1

あなたの「輸入後」という基準からすると、回避する条件applyと家族は非常に恣意的なものに思えます。そのためのあなたの論理に興味があります。

とにかく、あなたの固有の条件を尊重するデータをすでにインポートした後に問題を解決するための代替手段は次のとおりです。

  • で、ご家族classで使える新しいものをつくります。colClassesread.table
  • do.call(paste, ...)既存のdata.frameものをタブ区切りの文字ベクトルに折りたたむために使用します。
  • colClassesこの時間を指定して、その文字ベクトルを再度読み取ります。

例として上記を次に示します。

setClass("spc")           ## Strip punctuation and return a character vector
setAs("character", "spc", function(from) 
  gsub("[[:punct:]]", "", from))
setClass("spn")           ## Strip punctuation and return a numeric vector
setAs("character", "spn", function(from) 
  as.numeric(gsub("[[:punct:]]", "", from)))

## Use those `class`es in `colClasses`
out2 <- read.delim(text = do.call(paste, c(df, sep = "\t")), 
                   header = FALSE, colClasses = c("spc", "spn", "spc"))
str(out2)
# 'data.frame':  3 obs. of  3 variables:
#  $ V1: chr  "David" "Mark" "Alice"
#  $ V2: num  5000 1000 5055
#  $ V3: chr  "KS" "FL" "CA"

または、表形式で十分な場合は、データを に変換してmatrix使用することができますgsub

gsub("[[:punct:]]", "", as.matrix(df))
#      name    income state
# [1,] "David" "5000" "KS" 
# [2,] "Mark"  "1000" "FL" 
# [3,] "Alice" "5055" "CA" 
于 2013-10-31T17:06:25.140 に答える