3

R での文字列の分割に関する多くの投稿を読みました。ただし、変数が R に読み込まれた方法、つまり ID が短いため、場合によっては日付の後のスペースが原因であると思われるエラーが発生しています。文字変数「VESSELID」を「vesselID」と「DATE」の 2 つの新しい変数に分割しようとしています。以下は私のデータセットのサブセットです。

> dput(df)
structure(list(SETID = c(24153L, 24187L, 24215L, 31990L, 31990L, 
31995L, 31995L, 31995L, 31996L, 31996L, 31996L, 31997L, 31997L, 
32002L, 32002L, 32002L, 32002L, 32003L, 32003L, 32003L), VESSELID = c("6830 2002/08/13  ", 
"6830 2002/08/12  ", "6830 2002/08/15  ", "105372 2002/08/23", 
"105372 2002/08/23", "104234 2002/07/20", "104234 2002/07/20", 
"104234 2002/07/20", "104234 2002/07/21", "104234 2002/07/21", 
"104234 2002/07/21", "104234 2002/07/22", "104234 2002/07/22", 
"5744 2002/08/14  ", "5744 2002/08/14  ", "5744 2002/08/14  ", 
"5744 2002/08/14  ", "5744 2002/08/13  ", "5744 2002/08/13  ", 
"5744 2002/08/13  ")), .Names = c("SETID", "VESSELID"), row.names = c(1L, 
2L, 3L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 
21L, 22L, 23L, 24L, 25L, 26L), class = "data.frame")

私は次のことを試しました:

library(reshape2)
test <- data.frame(df, colsplit(df$VESSELID, split= " ",names=c("vesselID","DATE")))

ただし、次のエラー メッセージが表示されます。

Error in colsplit(log21$VESSELID, split = " ", names = c("vesselID", "DATE")) : 
      unused argument(s) (split = " ")

splitコマンドが正しく動作していないようです。文字列を修正する方法がわかりません。

4

3 に答える 3

3

実際にはread.table、以下のようにその列で使用します。データセットが「mydata」と呼ばれると仮定します。

mydata.new <- cbind(mydata[-2], 
                    read.table(text = as.character(mydata$VESSELID), 
                               strip.white=TRUE, header = FALSE))
names(mydata.new)[2:3] <- c("VesselID", "Date")
mydata.new
#    SETID VesselID       Date
# 1  24153     6830 2002/08/13
# 2  24187     6830 2002/08/12
# 3  24215     6830 2002/08/15
# 10 31990   105372 2002/08/23
# 11 31990   105372 2002/08/23
# 12 31995   104234 2002/07/20
# 13 31995   104234 2002/07/20
# 14 31995   104234 2002/07/20
# 15 31996   104234 2002/07/21
# 16 31996   104234 2002/07/21
# 17 31996   104234 2002/07/21
# 18 31997   104234 2002/07/22
# 19 31997   104234 2002/07/22
# 20 32002     5744 2002/08/14
# 21 32002     5744 2002/08/14
# 22 32002     5744 2002/08/14
# 23 32002     5744 2002/08/14
# 24 32003     5744 2002/08/13
# 25 32003     5744 2002/08/13
# 26 32003     5744 2002/08/13
于 2013-01-28T13:07:56.733 に答える
2

引数名は ではなくsplit、 ですpattern:

test <- data.frame(df, colsplit(df$VESSELID, pattern = " ",names=c("vesselID","DATE")))

与える:

   SETID          VESSELID vesselID         DATE
1  24153 6830 2002/08/13       6830 2002/08/13  
2  24187 6830 2002/08/12       6830 2002/08/12  
3  24215 6830 2002/08/15       6830 2002/08/15  
10 31990 105372 2002/08/23   105372   2002/08/23
11 31990 105372 2002/08/23   105372   2002/08/23
12 31995 104234 2002/07/20   104234   2002/07/20
13 31995 104234 2002/07/20   104234   2002/07/20
14 31995 104234 2002/07/20   104234   2002/07/20
15 31996 104234 2002/07/21   104234   2002/07/21
16 31996 104234 2002/07/21   104234   2002/07/21
17 31996 104234 2002/07/21   104234   2002/07/21
18 31997 104234 2002/07/22   104234   2002/07/22
19 31997 104234 2002/07/22   104234   2002/07/22
20 32002 5744 2002/08/14       5744 2002/08/14  
21 32002 5744 2002/08/14       5744 2002/08/14  
22 32002 5744 2002/08/14       5744 2002/08/14  
23 32002 5744 2002/08/14       5744 2002/08/14  
24 32003 5744 2002/08/13       5744 2002/08/13  
25 32003 5744 2002/08/13       5744 2002/08/13  
26 32003 5744 2002/08/13       5744 2002/08/13  
于 2013-01-28T13:06:32.317 に答える
1

試す:

do.call("rbind", strsplit(VESSELID, " "))

次のようなものを返す必要があります。

[,1]     [,2]         [,3]    
[1,] "6830"   "2002/08/13" ""      
[2,] "6830"   "2002/08/12" ""      
[3,] "6830"   "2002/08/15" ""      
[4,] "105372" "2002/08/23" "105372"
[5,] "105372" "2002/08/23" "105372"
[6,] "104234" "2002/07/20" "104234"
[7,] "104234" "2002/07/20" "104234"
[8,] "104234" "2002/07/20" "104234"
[9,] "104234" "2002/07/21" "104234"
[10,] "104234" "2002/07/21" "104234"
[11,] "104234" "2002/07/21" "104234"
[12,] "104234" "2002/07/22" "104234"
[13,] "104234" "2002/07/22" "104234"
[14,] "5744"   "2002/08/14" ""      
[15,] "5744"   "2002/08/14" ""      
[16,] "5744"   "2002/08/14" ""      
[17,] "5744"   "2002/08/14" ""      
[18,] "5744"   "2002/08/13" ""      
[19,] "5744"   "2002/08/13" ""      
[20,] "5744"   "2002/08/13" "" 

そこから必要なものを取る

于 2013-01-28T13:26:20.460 に答える