0

をサブセット化するときに問題が発生data frameRます。データフレームは、私が作成したいatt2列があります。この列の値は以下のとおりです。filter_namesubsetunique

unique(att2[["filter_name"]])
# [1] title             Type        Operating_System         Occasion           Brand
148 Levels: Accessories Age Antennae Art_Style Aspect_ratio ... Zoom

これは、それが列Brandの値であることを示していfilter_nameます。しかし、以下のコードを使用してフレームをサブセット化すると、以下のように0行になります。

att3 <- subset(att2, filter_name == 'Brand')
> att3
[1] a      b         c  filter_name
<0 rows> (or 0-length row.names)

理由がわかりません。誰かがこの種の問題に直面したことがありますか?

4

3 に答える 3

2

私たちにできることは、問題の原因を推測することだけです。

これが私の推測です。「filter_name」列には空白が含まれているため、空白を削除するまで実際に「ブランド」を探すべきではありません。

私の推測が正しければ、問題を再現する最小限の例を次に示します。

まず、いくつかのサンプルデータ:

mydf <- data.frame(Param =  c("   Brand   ", "Operating System", 
                              "Type ", "   Brand   ", "Type ", 
                              "Type ", "   Brand   ", "Type ", 
                              "   Brand   "), Value = 1:9)
unique(mydf[["Param"]])
# [1]    Brand         Operating System Type            
# Levels:    Brand    Operating System Type 

subset(mydf, Param == "Brand")
# [1] Param Value
# <0 rows> (or 0-length row.names)

引数とともに使用printして、 :quote = TRUEの空白を確認します。data.frame

print(mydf, quote = TRUE)
#                Param Value
# 1      "   Brand   "   "1"
# 2 "Operating System"   "2"
# 3            "Type "   "3"
# 4      "   Brand   "   "4"
# 5            "Type "   "5"
# 6            "Type "   "6"
# 7      "   Brand   "   "7"
# 8            "Type "   "8"
# 9      "   Brand   "   "9"

それが問題である場合は、クイックgsubで修正する必要があります。

mydf$Param <- gsub("^\\s+|\\s+$", "", mydf$Param)
unique(mydf[["Param"]])
# [1] "Brand"            "Operating System" "Type"  

subset(mydf, Param == "Brand")
#   Param Value
# 1 Brand     1
# 4 Brand     4
# 7 Brand     7
# 9 Brand     9

また、デフォルトで。になっているinおよびfamilyのstrip.white引数を調べることもできます。を使用してデータを再読み込みしてから、サブセット化を試してください。read.tableFALSEstrip.white = TRUE

于 2013-02-05T07:44:15.457 に答える
0

まず、良い質問をする方法について、このstackoverflowの投稿を実際に読む必要があります。

あなたの質問に対して、このようなもの(Arunも上で指摘しているように、再現可能な例を投稿しないと難しい)

 att2 <- (data.frame(v=rnorm(10), filter_name=c('Brand','Not Brand')))

 att2[att2$filter_name == 'Brand', ]
            v filter_name
1 -1.84217530       Brand
3 -0.36199449       Brand
5 -0.54431665       Brand
7 -0.05659442       Brand
9  1.29753513       Brand

 subset(att2, filter_name == 'Brand')
            v filter_name
1 -1.84217530       Brand
3 -0.36199449       Brand
5 -0.54431665       Brand
7 -0.05659442       Brand
9  1.29753513       Brand

サブ設定については、こちらをご覧ください。

于 2013-02-05T07:26:04.090 に答える
0

パッケージを使用stringrすると、次のようなことができます

   dat$filter_name_trim <- str_trim(dat$filter_name)
   att3 <- subset(att2, filter_name_trim == 'Brand')
于 2013-02-05T07:50:33.447 に答える