0

列が 1 つしかないように見えるデータセットから行を削除しようとすると問題が発生します。つまり、列ベクトルのようなものです。私は 2 つのことをしようとしています。(私にとって) どちらが先でも構いません。データのサンプルを次に示します。

共和党員,n,y,n,y,y,y,n,n,n,n,n,y,y,y,n,y
民主党員,y,y,y,n,n,n,y,y ,y,n,n,n,n,n,?,?

次のようにデータを取り込みます。

sampledata <- read.table("house-votes-84.data",)

しかし、各行のデータの文字列を列に変えて、その列に名前を付けたいと思います。これで、次のように名前を付けることができることがわかりました。

names(sampledata) <- c("col1" ...., "col17")

ただし、17 列ある場合にのみ可能です。各列はコンマで区切られています。

第二に、私は疑問符で行を取り除こうとしていますか?

私が試したことは何ですか?

私は次のようなことを試しました(私のデータはサンプルデータと呼ばれます):

sampledata[apply(sampledata[, -1], MARGIN = 1, function(x) all(x != "?")), ]  

それは機能しません(そして、列が1つしかないため、Marginは各列が調べられるものでなければならないので推測しています(Marginに-1を試しましたが、役に立ちませんでした)

? を NA に変更して、

na.omit(sampledata)

それもうまくいきません。

次のようなコンマによる解析を試みました

splitting <- strsplit(as.character(sampledata$V1), split=",")

ここで、V1 は単一の列名です。それは私が得た最も興味深い結果です

以下のうち 435 (435 行のデータがあります)

_[[435]]_  
_ [1] "republican" "n"          "y"          "n"          "y"        _  
_ [6] "y"          "y"          "n"          "n"          "n"       _
_[11] "y"          "n"          "y"          "y"          "y"  _
_[16] "NA"         "n"_

しかし、名前を変更しようとすると: Error in

names(sampledata) <- c("col1", "col2", "col3", "col4", "col5",  : 'names' attribute [17] must be the same length as the vector [1]

データセットに変換しようとするなど、他のことを試しましたが、これはすべての値をランダム化されているように見える数値に変換するようです (? の 0、1、または 99 などではなく、値100 まで、場合によってはそれ以上)

疑問符のないサンプルで回帰を実行できるように、データを正しい形式で取得しようとしています。

私が幸運に恵まれたサイトは Stack Exchange Also で、ここにあります:

特定の値より大きいすべてまたはいずれかの列を持つ行のサブセット

そしてここ:

コンマ区切りのエントリを列に変換する

最初のもので動作させることができますが、それでもコード自体の 3 列のデータを生成しています。以下を使用して疑問符の付いた行を削除するプログラム:

 X <- data.frame(Variable1=c(11,"?",12,15),Variable2=c(2,3,1,4))  
X[X$Variable1!="?", ]  

私はコードを作成する方法を見つけようとしてきました.行ごとに、インポートされたデータに対して同じことを実行します.data.frameとしても(私は1列しかなく、列はV1と呼ばれるので、同様にコードを次のように変更しました

X$V1  

sampledata <- read.table("house-votes-84NaN.data.txt")
splitdat = do.call("rbind", strsplit(sampledata$V1, ","))

しかし、私は得る

**Error in strsplit(sampledata$V1, ",") : non-character argument**

私は read.table にもっと引数が必要であることを認識しています (私は思います)。

どんな助けでも大歓迎です。

ありがとうございました、

ブライアン

4

2 に答える 2

1

まず、関数read.csvと引数header = FALSEand を使用してデータを読み取りrow.names = 1ます。

sampledata <- read.csv(text="republican,n,y,n,y,y,y,n,n,n,n,n,y,y,y,n,y
democrat,y,y,y,n,n,n,y,y,y,n,n,n,n,n,?,?", header = FALSE, row.names = 1)

t次に、データ フレームを次のように転置できます。

t(sampledata)

結果:

    republican democrat
V2  "n"        "y"     
V3  "y"        "y"     
V4  "n"        "y"     
V5  "y"        "n"     
V6  "y"        "n"     
V7  "y"        "n"     
V8  "n"        "y"     
V9  "n"        "y"     
V10 "n"        "y"     
V11 "n"        "n"     
V12 "n"        "n"     
V13 "y"        "n"     
V14 "y"        "n"     
V15 "y"        "n"     
V16 "n"        "?"     
V17 "y"        "?"

を使用して、疑問符の付いた列を削除できます

dat <- as.data.frame(t(sampledata))

dat[!apply(dat == "?", 2, any)]

    republican
V2           n
V3           y
V4           n
V5           y
V6           y
V7           y
V8           n
V9           n
V10          n
V11          n
V12          n
V13          y
V14          y
V15          y
V16          n
V17          y
于 2012-12-21T19:02:34.817 に答える
1

(おそらく、転置操作と削除操作の順序についてもっと明確にする必要があると思います。これは最初に削除を行いますが、最初に転置した場合は異なる結果になります.

 dat <- read.table(text="republican,n,y,n,y,y,y,n,n,n,n,n,y,y,y,n,y
 democrat,y,y,y,n,n,n,y,y,y,n,n,n,n,n,?,?", sep=",")
 dat
#--------------------
          V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17
1 republican  n  y  n  y  y  y  n  n   n   n   n   y   y   y   n   y
2   democrat  y  y  y  n  n  n  y  y   y   n   n   n   n   n   ?   ?
#--------------
 dat[ ! apply(dat, 1, function (x) any(x=="?") ), ]
#----------------
          V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17
1 republican  n  y  n  y  y  y  n  n   n   n   n   y   y   y   n   y

なぜこれを転置したいのかわかりませんが、t関数 (transpose) を使用して転置できます。

> t( dat[ ! apply(dat, 1, function (x) any(x=="?") ), ] )
    1           
V1  "republican"
V2  "n"         
V3  "y"         
V4  "n"         
V5  "y"         
V6  "y"         
V7  "y"         
V8  "n"         
V9  "n"         
V10 "n"         
V11 "n"         
V12 "n"         
V13 "y"         
V14 "y"         
V15 "y"         
V16 "n"         
V17 "y"         

パーティー行の順序でデータを使用すると、「?」を使用して質問を削除できます。列抽出で apply を使用して列の応答を取得します (列の位置に apply fn を配置し、MARGIN 引数として 2 を使用します)。

> dat[ , ! apply(dat, 2, function (x) any(x=="?") ) ]
          V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15
1 republican  n  y  n  y  y  y  n  n   n   n   n   y   y   y
2   democrat  y  y  y  n  n  n  y  y   y   n   n   n   n   n
于 2012-12-21T19:02:35.847 に答える