2016-09-26 2 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" 

각 단지 회사 이름 중 하나입니다

나는 출력의 모습을 보여 드리겠습니다.

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) '예' 의 값 또는 '아니오'

에서 '테스트'및 데이터 값으로 (치수 및 ' "클래스"'포함)와 동일한 길이의

벡터를 반환하고 속성 당신의 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)) 

을 시도합니다.

관련 문제