2016-09-26 17 views
2

ifelseステートメントを使用してデータテーブルのサブセットを作成しようとしていますが、私が探していた結果が得られません。古いデータテーブルのifelseに基づいて新しいデータテーブルを作成する

私の最初のデータテーブルには、次のようになります。

head(Data_copy, n = 18) 

    Company  Date  DOW variable value Year Month End_of_Month 
1: ASXRI 1991-09-06 Friday  RI NA 1991 Sep   0 
2: ASXRI 1991-09-09 Monday  RI NA 1991 Sep   0 
3: ASXRI 1991-09-10 Tuesday  RI NA 1991 Sep   0 
4: ASXRI 1991-09-11 Wednesday  RI NA 1991 Sep   0 
5: ASXRI 1991-09-12 Thursday  RI NA 1991 Sep   0 
6: ASXRI 1991-09-13 Friday  RI NA 1991 Sep   0 
7: ASXRI 1991-09-16 Monday  RI NA 1991 Sep   0 
8: ASXRI 1991-09-17 Tuesday  RI NA 1991 Sep   0 
9: ASXRI 1991-09-18 Wednesday  RI NA 1991 Sep   0 
10: ASXRI 1991-09-19 Thursday  RI NA 1991 Sep   0 
11: ASXRI 1991-09-20 Friday  RI NA 1991 Sep   0 
12: ASXRI 1991-09-23 Monday  RI NA 1991 Sep   0 
13: ASXRI 1991-09-24 Tuesday  RI NA 1991 Sep   0 
14: ASXRI 1991-09-25 Wednesday  RI NA 1991 Sep   0 
15: ASXRI 1991-09-26 Thursday  RI NA 1991 Sep   0 
16: ASXRI 1991-09-27 Friday  RI NA 1991 Sep   0 
17: ASXRI 1991-09-30 Monday  RI NA 1991 Sep   1 
18: ASXRI 1991-10-01 Tuesday  RI NA 1991 Oct   0 

この25万のうち18行です。

は何私が欲しいのは、次のようにifelse関数に基づいて、このデータテーブルを分割することです:

Data1 <- ifelse("Weekly" == "Weekly", Data_copy[End_of_Month ==1,], Data_copy) 

*「週刊」==「週刊」ビットは後の関数で使用されようとしています。

私は、Data1をEnd_of_Month == 1の行のみを含む新しいデータテーブルにします。

私は上記のコードを実行すると、という会社名のリストが得られます。

私は、出力がどのように見えるかを紹介します:

Data1[[1]] 
    [1] "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" "ASXRI" 

今、私はさらに下にスクロールする場合、私は得る:

[1387] "AANRI" "AANRI" "AANRI" "AANRI" "AANRI" "AANRI" "APARI" "APARI" "APARI" "APARI" "APARI" 
[1398] "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" "APARI" 

これらのエントリのそれぞれは、ちょうど1つの会社の名前のです。

私がしなければ、私は私の望ましい結果を得る:

Data2 <- Data_copy[End_of_Month == 1, ] 

Company  Date  DOW variable value Year Month End_of_Month 
1: ASXRI 1991-09-30 Monday  RI NA 1991 Sep   1 
2: ASXRI 1991-10-31 Thursday  RI NA 1991 Oct   1 
3: ASXRI 1991-11-29 Friday  RI NA 1991 Nov   1 
4: ASXRI 1991-12-31 Tuesday  RI NA 1991 Dec   1 
5: ASXRI 1992-01-31 Friday  RI NA 1992 Jan   1 
6: ASXRI 1992-02-28 Friday  RI NA 1992 Feb   1 

基本的に私は、データ2を複製するように、しかし、ifelse文を使用したいです。

ここでは最初の100行です:

dput(head(Data_copy, n = 100)) 
structure(list(Company = c("ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI", 
"ASXRI", "ASXRI", "ASXRI", "ASXRI", "ASXRI"), Date = structure(c(7918, 
7921, 7922, 7923, 7924, 7925, 7928, 7929, 7930, 7931, 7932, 7935, 
7936, 7937, 7938, 7939, 7942, 7943, 7944, 7945, 7946, 7949, 7950, 
7951, 7952, 7953, 7956, 7957, 7958, 7959, 7960, 7963, 7964, 7965, 
7966, 7967, 7970, 7971, 7972, 7973, 7974, 7977, 7978, 7979, 7980, 
7981, 7984, 7985, 7986, 7987, 7988, 7991, 7992, 7993, 7994, 7995, 
7998, 7999, 8000, 8001, 8002, 8005, 8006, 8007, 8008, 8009, 8012, 
8013, 8014, 8015, 8016, 8019, 8020, 8021, 8022, 8023, 8026, 8027, 
8028, 8029, 8030, 8033, 8034, 8035, 8036, 8037, 8040, 8041, 8042, 
8043, 8044, 8047, 8048, 8049, 8050, 8051, 8054, 8055, 8056, 8057 
), class = "Date"), DOW = c("Friday", "Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", 
"Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", 
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", 
"Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", 
"Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", 
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", 
"Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", 
"Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", 
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", 
"Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", 
"Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday" 
), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("RI", 
"VO", "MV", "TD", "ND"), class = "factor"), value = c(NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, 
NA_real_), Year = c("1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1991", "1991", "1991", 
"1991", "1991", "1991", "1991", "1991", "1992", "1992", "1992", 
"1992", "1992", "1992", "1992", "1992", "1992", "1992", "1992", 
"1992", "1992", "1992", "1992", "1992", "1992"), Month = c("Sep", 
"Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", 
"Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Sep", "Oct", "Oct", 
"Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", 
"Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", "Oct", 
"Oct", "Oct", "Oct", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", 
"Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Nov", 
"Nov", "Nov", "Nov", "Nov", "Nov", "Nov", "Dec", "Dec", "Dec", 
"Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", 
"Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", "Dec", 
"Dec", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", 
"Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan", "Jan" 
), End_of_Month = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0)), .Names = c("Company", "Date", "DOW", "variable", "value", 
"Year", "Month", "End_of_Month"), class = c("data.table", "data.frame" 
), row.names = c(NA, -100L), .internal.selfref = <pointer: 0x00000000001f0788>) 
+0

私は最初のデータを複製したいと思います。 – jangorecki

+0

@jangorecki試したいデータをいくつか追加しました。 –

+0

'ifelse'を使うあなたのやり方は、一般的には悪い考えです。関数の優れた構文にもかかわらず、それには多くの短所と限界があります。そのため、私はあなたのアプローチ、すなわちData_copy [End_of_Month == 1]に固執します。もしあなたがここで 'ifelse'を使いたい理由を言っていないので、何かが足りないかもしれません。 – Frank

答えて

2

他のユーザーはifelseがあなたの目的には不適切であることを指摘しています。それは理由を説明するのに役立つかもしれません。 ?ifelseから、ifelse(test, yes, no)「YES」 の値または「NO」

から「試験」およびデータ値として(寸法 と「『クラス』」を含む)は、同じ長さの

ベクトルを返し、属性すなわち

あなたtestベクトルは長さ1である場合に、ifelse(...)は例えば長さ1のベクトルが返され、

> ifelse(TRUE, 1:3, 7:9) 
[1] 1 
> ifelse(c(TRUE, FALSE), 1:3, 7:9) 
[1] 1 8 

あなたの場合、

ifelse("Weekly" == "Weekly", Data_copy[End_of_Month ==1,], Data_copy) 

は長さ1のベクトルを返します。より正確には、テストではTRUEが返されるため、ifelseyes引数の最初の要素を返します。それはデータフレーム(リストの一種)なので、ifelseは、最初の列であるデータフレームの最初の要素を返します。これが会社名のリストを取得する理由です。あなたが本当にifelse建設を使用したい場合は他の人が言ってきたように、あなたがif {} else {}を使用したほうが良いかもしれないが、

ifelse("Weekly" == "Weekly", list(Data_copy[End_of_Month ==1,]), list(Data_copy)) 

を試してみてください。

関連する問題