2016-08-24 8 views
-1

str_split_fixedを使用して、最初の列を6つの列に分割しました。私はCOLNAMESを使用して、これらの列の名前を変更したいその後r str_splitの後の列の削除と名前の変更

adobe.placement$name <- str_split_fixed(adobe.placement$name, ":::", 6) 

colnames(adobe.placement) <- c("Source","Keyword","Type","Campaign","Medium","Visits") 

それは私がspecfic名にこれらの列を変更することができますどのように、Source.1にSource.2などを最初の6列を変更?

adobe.placement[3] <- NULL 

これらの分割された列の名前を変更し、そのうちの1つを削除するにはどうすればよいですか?

EDIT:入力データ:

name          A B C D E 
2 test:::ok:::test:::ok:::test:::ok:::delete 2 3 4 ok 1900-01-05 
3 test:::ok:::test:::ok:::test:::ok:::delete 2 2 4 ok 1900-01-05 
4 test:::ok:::test:::ok:::test:::ok:::delete 2 2 4 ok 1900-01-05 
5 test:::ok:::test:::ok:::test:::ok:::delete 2 2 4 ok 1900-01-05 
6 test:::ok:::test:::ok:::test:::ok:::delete 2 2 4 ok 1900-01-05 

所望の出力:

Source Keyword Type Campaign Medium Visits A B C D E 
2 test ok  test ok  test ok  2 3 4 ok 1900-01-05 
3 test ok  test ok  test ok  2 3 4 ok 1900-01-05 
4 test ok  test ok  test ok  2 3 4 ok 1900-01-05 
5 test ok  test ok  test ok  2 3 4 ok 1900-01-05 
6 test ok  test ok  test ok  2 3 4 ok 1900-01-05 
+0

ような何かを行うことができます。 'dput'の結果をカット/ペーストすることでこれを行うことができます。 – steveb

+0

また、希望する出力がどのようなものであるべきかがはっきりしている場合でも、希望する出力を含めると便利です。 – steveb

+0

私は自分の投稿を入力データで編集しました。 – TityBoi

答えて

0

コードのあなたの最初のライン:

adobe.placement$name <- str_split_fixed(adobe.placement$name, ":::", 6) 

単一に全データフレーム(6列)を割り当てます実質的にネストされたデータフレームです。列には、内側の列名と連結された外側の列名の名前が "。"で区切られて与えられます。あなたが見たように。あなたがstr(adobe.placement)と入力してdata.frameにもう1つのdata.frameが含まれていることがわかりました。むしろ、既存の列の内側にそれらを置くよりも、データフレームに余分な列を追加します

adobe.placement <- cbind(str_split_fixed(adobe.placement$name, ":::", 6),adobe.placement[,-1]) 
names(adobe.placement)[1:6] <- c("Source","Keyword","Type","Campaign","Medium","Visits") 

解決策のようなもので、この混乱に入る避けるためです。

+0

'str_split_fixed'が値" 2 "で呼び出されているのはなぜですか?私は何かを見逃しているかもしれない。 – steveb

+0

opの前にテストから残った@stevebは、サンプルのデータセットを与えました。 – Miff

+0

回答が似ているかどうかわからないので、私の回答の冒頭に私の注意を見てください。私は完全なカット/ペーストのソリューションを提供しようとしていました。それがあまりにも似ている場合、私はそれを削除し、あなたの答えに何かを追加すること自由に感じる。 – steveb

0

注:この回答は他の回答と似ていますが、より完全な(つまり、切り取り/貼り付け時に機能するデータとコードを提供する)可能性があります。これが回答に近すぎると思われる場合、または他の回答がより完全に行われた場合は、この回答を削除します。そうでない場合は、このメモを削除します。

あなたは、サンプルの入力データを提供してください、次の

### Input data 
df <- structure(list(name = c("test:::ok:::test:::ok:::test:::ok:::delete", 
"test:::ok:::test:::ok:::test:::ok:::delete", "test:::ok:::test:::ok:::test:::ok:::delete", 
"test:::ok:::test:::ok:::test:::ok:::delete", "test:::ok:::test:::ok:::test:::ok:::delete" 
), A = c(2L, 2L, 2L, 2L, 2L), B = c(3L, 2L, 2L, 2L, 2L), C = c(4L, 
4L, 4L, 4L, 4L), D = c("ok", "ok", "ok", "ok", "ok"), E = c("1900-01-05", 
"1900-01-05", "1900-01-05", "1900-01-05", "1900-01-05")), .Names = c("name", 
"A", "B", "C", "D", "E"), class = "data.frame", row.names = c(NA, 
-5L)) 

new_colnames <- c("Source", "Keyword", "Type", "Campaign", "Medium", "Visits") 
colcnt <- length(new_colnames) 
### Even if 'name' has extra ':::' trailing, the result should be ok. 
newdf <- cbind(str_split_fixed(df$name, ":::", colcnt+1)[,-(colcnt+1)], df[,-1]) 
colnames(newdf)[1:colcnt] <- new_colnames 
newdf 

## Source Keyword Type Campaign Medium Visits A B C D   E 
## 1 test  ok test  ok test  ok 2 3 4 ok 1900-01-05 
## 2 test  ok test  ok test  ok 2 2 4 ok 1900-01-05 
## 3 test  ok test  ok test  ok 2 2 4 ok 1900-01-05 
## 4 test  ok test  ok test  ok 2 2 4 ok 1900-01-05 
## 5 test  ok test  ok test  ok 2 2 4 ok 1900-01-05 
関連する問題