2016-11-04 12 views
1

の列にstr_splitを適用する:列 '今年の単語の私は私の名前次のdf持つデータフレーム

structure(list(price = c(11772, 14790, 2990, 1499, 21980, 27999 
), fuel = c("diesel", "petrol", "petrol", "diesel", "diesel", 
"petrol"), gearbox = c("manual", "manual", "manual", "manual", 
"automatic", "manual"), colour = c("white", "purple", "yellow", 
"silver", "red", "rising blue metalli"), engine_size = c(1685, 
1199, 998, 1753, 2179, 1984), mileage = c(18839, 7649, 45058, 
126000, 31891, 100), year = c("2013 hyundai ix35", "2016 citroen citroen ds3 cabrio", 
"2007 peugeot 107 hatchback", "2007 ford ford focus hatchback", "2012 jaguar xf saloon", 
"2016 volkswagen scirocco coupe"), doors = c(5, 2, 3, 5, 4, 3 
)), .Names = c("price", "fuel", "gearbox", "colour", "engine_size", 
"mileage", "year", "doors"), row.names = c(NA, 6L), class = "data.frame") 

を一部が重複しています。私はそれらを削除したいと思います。最初のステップとして、この列の文字列を別々の単語で区切りたいと思います。 は、私は別の文字列のためにそれを行うことができたが、私は、全体のデータフレームに適用しようとすると、それは

unlist(str_split("2013 hyunday ix35", "[[:blank:]]")) 

[1]「2013」「hyunday」「ix35」

をエラーが発生します
for(k in 1:nrow(i)) 
+ i[k,7]<-unlist(str_split(i[k, 7], "[[:blank:]]")) 

エラーで[<-.data.frame*tmp*、kは、図7に示すように、値= cは、( "2013"、 "現代" は、: 交換は、データは1

答えて

2

我々は、1つ以上のスペースで分割することができ(\\s+を3行を有しています)、paste th電子unique要素一緒に(リストを操作するためのpurrrの助けを借りて)dplyrstringrでの作業list出力(sapply(..

i$year <- sapply(strsplit(i$year, "\\s+"), function(x) paste(unique(x), collapse=' ')) 
+1

それが正常に動作します。私はサプリを使用しようとしましたが、2つの機能(ペーストとユニーク)をどのように組み合わせるかは分かりませんでした。 – Vasile

2

をループすることで、あなたはこれを行うことができます:

library(dplyr) 
df %>% 
    mutate(newyear = purrr::map_chr(
    stringr::str_split(year, pattern = "[[:blank:]]"), 
    ~ paste(unique(.x), collapse = " ") 
    )) 
#> price fuel gearbox    colour engine_size mileage 
#> 1 11772 diesel manual    white  1685 18839 
#> 2 14790 petrol manual    purple  1199 7649 
#> 3 2990 petrol manual    yellow   998 45058 
#> 4 1499 diesel manual    silver  1753 126000 
#> 5 21980 diesel automatic     red  2179 31891 
#> 6 27999 petrol manual rising blue metalli  1984  100 
#>        year doors      newyear 
#> 1    2013 hyundai ix35  5    2013 hyundai ix35 
#> 2 2016 citroen citroen ds3 cabrio  2  2016 citroen ds3 cabrio 
#> 3  2007 peugeot 107 hatchback  3  2007 peugeot 107 hatchback 
#> 4 2007 ford ford focus hatchback  5  2007 ford focus hatchback 
#> 5   2012 jaguar xf saloon  4   2012 jaguar xf saloon 
#> 6 2016 volkswagen scirocco coupe  3 2016 volkswagen scirocco coupe 
+0

これは素晴らしいことです。私は本当に困っていました...あなたが '〜ペースト(一意...)の部分が何をしているのか、それをどうやって知っていたのですか? –

関連する問題