ProjectSubjectという列を含むデータフレームがあります。データフレームの長さは約1,000,000行です。
ProjectSubject列内には、さまざまな文字列がたくさんあります。次に例を示します。
>unique(unlist(projectdf$ProjectSubject))
[1] "Applied Learning" "Applied Learning, Literacy
& Language"
[3] "Literacy & Language" "Special Needs"
[5] "Literacy & Language, History & Civics" "Math & Science"
[7] "History & Civics, Math & Science" "Literacy & Language,
Special Needs"
[9] "Applied Learning, Special Needs" "Health & Sports, Special
Needs"
[11] "Math & Science, Literacy & Language" "Literacy & Language, Math
& Science"
[13] "Literacy & Language, Music & The Arts" "Math & Science, Special
Needs"
[15] "Health & Sports" "Music & The Arts"
[17] "Math & Science, Applied Learning" "Literacy & Language,
Applied Learning"
[19] "Applied Learning, Music & The Arts" "History & Civics,
Literacy & Language"
[21] "Applied Learning, Math & Science" "Health & Sports, Math &
Science"
[23] "Applied Learning, Health & Sports" "History & Civics"
[25] "History & Civics, Music & The Arts" "Math & Science, History &
Civics"
[27] "Math & Science, Music & The Arts" "Special Needs, Music &
The Arts"
[29] "History & Civics, Applied Learning" "History & Civics, Special
Needs"
データフレームの列全体を調べて、これらの文字列の束を別の文字列に置き換えるには、簡潔で非手動の方法が必要です。たとえば、「応用学習、特別支援」を「特別支援」に置き換えたり、同様に「応用学習、数学、科学」を「数学」に置き換えたいと考えています。
上記のサンプルコードによく似た約50の一意の文字列があり、約10の一意の文字列に減らしたいと思います。できれば、50個の文字列のそれぞれにコード行を手動で入力せずにこれを行う必要がない方法があります。
これが私がいいと思う方法です:
# first create some fake data that approximates your situation
set.seed(6933)
fruit_words <- c("apple", "orange", "banana", "pappels", "orong", "bernaner")
dat <- data.frame(fruit = sample(fruit_words, size=10, replace=TRUE),
stringsAsFactors=FALSE)
の各一意の値をdat$fruit
、代わりに使用する目的のカテゴリ/文字列に関連付けるテーブルを作成します。
fruit_lkup <- c(apple="appl", orange="orng", banana="bnna",
pappels="appl", orong="orng", bernaner="bnna")
次にdat$fruit
、の名前を保持している事実を悪用しますfruit_lkup
dat$fruit_clean <- as.character(fruit_lkup[dat$fruit])
そして、これが結果です:
print(dat)
## fruit fruit_clean
## 1 pappels appl
## 2 orong orng
## 3 apple appl
## 4 banana bnna
## 5 apple appl
## 6 bernaner bnna
## 7 bernaner bnna
## 8 pappels appl
## 9 bernaner bnna
## 10 bernaner bnna
したがって、実際には、ほとんどの作業は、値の検索に使用するオブジェクトの作成にあります- fruit_lkup
。
開始する1つの方法は、を使用しdput(unique(dat$fruit))
、それをスクリプトに貼り付けて、置換する値の指定を開始することです。
一意の値が多すぎる場合は、一意の値をcsvに書き込んでから、置き換えたい値を手動で追加することもできます。次に、データフレーム(言うように(今)2列のCSVで読むことができるlookup_df
)、および作成fruit_lkup
でfruit_lkup <- setNames(lookup_df$new_values, lookup_df$old_values)
このアプローチは、基本的にあなたが説明する状況で、何度も非常に便利であることがわかりました。
これがお役に立てば幸いです~~
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加