2017-03-28 11 views
1

フォークは、カラム名から2番目のドットをどのように置き換えることができますか?2回目以降のカラム名からのドットの置換方法

サンプルデータ:

age.range.abc = sample(c("ar2-15", "ar16-29", "ar30-44"), 200, replace = TRUE) 
gender.region.q = sample(c("M", "F"), 200, replace = TRUE) 
region_g.a = sample(c("A", "B", "C"), 200, replace = TRUE) 
physi = sample(c("Poor", "Average", "Good"), 200, replace = TRUE) 
survey = data.frame(age.range.abc, gender.region.q, region_g.a,physi) 
head(survey) 

私はこれを試してみましたが、それはアンダースコアですべてのドットを削除します。私は2回目以降の出現をアンダースコアで置き換えたい。

names(survey) = gsub("\\.", "_", names(survey)) 
names(survey) 
# [1] "age_range_abc" "gender_region_q" "region_g_a"  "physi" 

おかげで、 J

答えて

3

です:

names(survey) = sub("(\\..*?)\\.", "\\1_", names(survey)) 
names(survey) 
[1] "age.range_abc" "gender.region_q" "region_g.a"  "physi" 

それが助け場合は少し余分なディテール。

\\.は最初.
.*?.は任意の文字に一致します一致します。 .*は、0個以上の任意の文字のインスタンスに一致します。しかし、マッチングは貪欲です。それは可能な限り一致します。私はそれが欲張りではない(2番目の.まで)マッチングしたいので追加しましたか?貪欲な一致を抑制するために、.*?は正規表現の次のものを打つまで、あらゆる文字グループに一致します。
もう1つの.と一致する別の\\.です。
は、最初の部分が括弧(\\..*?)で囲まれたので\ 1として記憶されるので、第.及び第._で置換されている前置換パターン\\1_はすべてを復元します。

+0

"少し余分な詳細"非常に有用だったG5W – Jennifer

1

は、1つのオプションは、あなたの元のコードの精神でstrsplit

names(survey) <- sapply(strsplit(names(survey), "[.]"), function(x) 
    if(length(x) >1) paste(x[1], paste(x[-1], collapse="_"), sep=".") else x) 
names(survey) 
#[1] "age.range_abc" "gender.region_q" "region_g.a"  "physi" 
関連する問題