0

文字列のベクトルがあり、それぞれが ID の csv リストです。各文字列をリストに分割し、ID の長さとセットを 2 つの新しい列としてデータフレームに格納します。次に例を示します。

df = data.frame(ids = c("a,b,c", "d", "e", "", "f,g", "", "h", "i", ""), stringsAsFactors=FALSE)
ids = sapply(df$ids, function (s) unlist(strsplit(as.character(s), ",")))
df$num.ids = sapply(ids, length)
df$ids.vec = sapply(ids, unlist)

これは今のところ良さそうです:

> df
    ids num.ids ids.vec
1 a,b,c       3 a, b, c
2     d       1       d
3     e       1       e
4             0        
5   f,g       2    f, g
6             0        
7     h       1       h
8     i       1       i
9             0    

しかし、summary(df) と入力すると、ids.vec の不思議な列が表示されます。さらに重要なことは、要約は要約を計算するのではなく、すべての行をリストすることです (これは、実際のデータセットに適用するときに問題になります)。

> summary(df)
      ids               num.ids  ids.vec.Length  ids.vec.Class  ids.vec.Mode
 Length:9           Min.   :0   3          -none-     character            
 Class :character   1st Qu.:0   1          -none-     character            
 Mode  :character   Median :1   1          -none-     character            
                    Mean   :1   0          -none-     character            
                    3rd Qu.:1   2          -none-     character            
                    Max.   :3   0          -none-     character            
                                1          -none-     character            
                                1          -none-     character            
                                0          -none-     character  

私が間違っていることはありますか?

ありがとう!ケビン

4

1 に答える 1

0

あなたは何も悪いことをしていません。@joranが述べたように、質問は実際にsummary()からどのような情報を取得することを期待していますか?

表示されているのは、次の 2 つの要約の組み合わせです。

# df1 is df less ids.vec;  df2 is only ids.vec
df1 <- df[,names(df) != "ids.vec"]
df2 <- df[,names(df) == "ids.vec"]

> summary(df1)  # summary for a data frame
     ids               num.ids 
 Length:9           Min.   :0  
 Class :character   1st Qu.:0  
 Mode  :character   Median :1  
                    Mean   :1  
                    3rd Qu.:1  
                    Max.   :3  

> summary(df2)   # summary for a list
      Length Class  Mode     
a,b,c 3      -none- character
d     1      -none- character
e     1      -none- character
      0      -none- character
f,g   2      -none- character
      0      -none- character
h     1      -none- character
i     1      -none- character
      0      -none- character

結合された要約のフォーマットは少しぎこちないです。

リストの要約全体を 1 つの列として扱うことに注意してください。

> colnames(summary(df))
[1] "    ids"                                    
[2] "   num.ids"                                 
[3] "ids.vec.Length  ids.vec.Class  ids.vec.Mode"

df2 がリストであることにも注意してください。

> str(df2)
List of 9
 $ a,b,c: chr [1:3] "a" "b" "c"
 $ d    : chr "d"
 $ e    : chr "e"
 $      : chr(0) 
 $ f,g  : chr [1:2] "f" "g"
 $      : chr(0) 
 $ h    : chr "h"
 $ i    : chr "i"
 $      : chr(0)

元のデータフレームの一部です

> str(df)
'data.frame': 9 obs. of  3 variables:
 $ ids    : chr  "a,b,c" "d" "e" "" ...
 $ num.ids: int  3 1 1 0 2 0 1 1 0
 $ ids.vec:List of 9
  ..$ a,b,c: chr  "a" "b" "c"
  ..$ d    : chr "d"
  ..$ e    : chr "e"
  ..$      : chr 
  ..$ f,g  : chr  "f" "g"
  ..$      : chr 
  ..$ h    : chr "h"
  ..$ i    : chr "i"
  ..$      : chr 
于 2012-11-10T00:16:05.497 に答える