質問
私は数字とアルファベットの組み合わせを持つ大きなデータセットを持っています。ほんの小さな例:
sex <- c("M", "F", "F", "M", "M")
ind <- c("I1", "I2", "I3", "I4", "C")
M1 <- c("ab", "bb", "ac", "ad", "dd")
M2 <- c(12, 22, 23, 24, 25)
M3 <- c("AT", "AG", "AC", "GG", "TC")
M4 <- c(22, 23, 24, 14, 24)
mydf <- data.frame(sex, ind, M1, M2, M3, M4)
mydf
sex ind M1 M2 M3 M4
1 M I1 ab 12 AT 22
2 F I2 bb 22 AG 23
3 F I3 ac 23 AC 24
4 M I4 ad 24 GG 14
5 M C dd 25 TC 24
列の2つの文字の間に「/」マークを導入したいM1......Mn (ファイルの終わり)結果のデータフレームは次のようになります:
sex ind M1 M2 M3 M4
1 M I1 a/b 1/2 A/T 2/2
2 F I2 b/b 2/2 A/G 2/3
3 F I3 a/c 2/3 A/C 2/4
4 M I4 a/d 2/4 G/G 1/4
5 M C d/d 2/5 T/C 2/4
申し訳ありませんが、私はどのように進めるか無知でした。..あなたの助けは高く評価されました。..
解決
ワンライナー: ジェネラコディセタグプレ
他のヒント
Rの不可解な力のすべてがあなたにこれを与えます:
splitInsert
を使用して各文字の列を分割しますstrsplit
そして、それを再結合しますpaste
.これはラップされていますsapply
関数をベクトル化する。- 私はそれから使用します
lapply
応募するにはsplitInsert
データの列3:6を超えます。フレーム、およびdata.frame
変更したくない2つの列と結合するには。 - に注意してください。
splitInsert
完全に一般的です-任意の長さのテキスト文字列で機能し、選択した新しい文字を使用して分割要素を再結合できます。
コード:
splitInsert <- function(x, split="", new="/"){
sapply(x, function(y)
paste(
strsplit(as.character(y), split=split)[[1]],
collapse=new)
)
}
data.frame(mydf[, 1:2], lapply(mydf[, 3:ncol(mydf)], splitInsert))
その結果は以下の通りです:
sex ind M1 M2 M3 M4
1 M I1 a/b 1/2 A/T 2/2
2 F I2 b/b 2/2 A/G 2/3
3 F I3 a/c 2/3 A/C 2/4
4 M I4 a/d 2/4 G/G 1/4
5 M C d/d 2/5 T/C 2/4
これはうまくいくようです。 ジェネラコディセタグプレ
出力 ジェネラコディセタグプレ
所属していません StackOverflow