2016-10-21 3 views
1

각각 5 x 값 (A, B, C, D, E)을 갖는 10 개의 변수 (ID1 - 1D10) :R에 특정 열 값이있는 행 선택 : 결과에 행이 누락 됨

library(plotly) 
library(data.table) 

set.seed(1) 
dat <- data.frame(ID = paste0("ID",1:10), A = runif(10), B = runif(10), C = runif(10), D = runif(10), E = runif(10)) 
dat$ID <- as.character(dat$ID) 
datt <- data.frame(t(dat)) 
names(datt) <- as.matrix(datt[1, ]) 
datt <- datt[-1, ] 
datt[] <- lapply(datt, function(x) type.convert(as.character(x))) 
setDT(datt, keep.rownames = TRUE)[] 
colnames(datt)[1] <- "x" 
dat_long <- melt(datt, id.vars ="x") 

이것은 다음과 같은 형식의 데이터 프레임을 (이 그것의 처음 7 개 라인이다) 생성 :

x variable  value 
1: A  ID1 0.2655087 
2: B  ID1 0.2059746 
3: C  ID1 0.9347052 
4: D  ID1 0.4820801 
5: E  ID1 0.8209463 
6: A  ID2 0.3721239 
7: B  ID2 0.1765568 

단순히이이 데이터 프레임 만 행을 잡으려고 노력하고있다 ID1 또는 ID2의 변수 값. 이것은 각 행의 ID가 5 x 값 A, B, C, D, E이므로 10 행을 가져와야합니다. 그러나, 수행시 :

dat_long[dat_long$variable==c("ID1","ID2"),] 

나는 6 행만 수신합니다. 즉, I은 5 X 값 (A, C, E)에서 3 나타날

x variable  value 
1: A  ID1 0.2655087 
2: C  ID1 0.9347052 
3: E  ID1 0.8209463 
4: A  ID2 0.3721239 
5: C  ID2 0.2121425 
6: E  ID2 0.6470602 

다음 I가 문자에 계수의 데이터 프레임의 변수 항목을 변경하려고 :

dat_long$variable = as.character(dat_long$variable) 
dat_long[dat_long$variable==c("ID1","ID2"),] 

하지만 정확히 동일한 문제가 발생합니다. which() 명령을 실행할 때도 같은 문제가 계속 발생합니다.

which(dat_long$variable==c("ID1","ID2"),) 

이 문제를 해결하는 방법에 대한 제안 사항이 있습니까? 내가 할 때 :

str(c("ID1","ID2")) 

을 나는 다음과 같은 얻을 :

chr [1:2] "ID1" "ID2" 

내가 아마 형식 위의 즉시에 ID의 키를 계속해야합니다. 그 이유는 Shiny 응용 프로그램을 사용하고 ID 키의 입력 값이이 형식이기 때문입니다. ID 키는 다른 조합과 숫자 일 수 있습니다. 예를 들어, 입력에는 세 개의 ID (예 : c ("ID1", "ID2", "ID5"))가있을 수 있습니다. 따라서 위의 형식의 문자 배열을 ID 키에 사용하여 솔루션을 파생시킬 필요가 있습니다.

모든 조언을 크게 높이세요!

+2

...'%의 C ("ID1", "ID2")'에서 % – bergant

답변

1

@bergant는 %in% 연산자를 사용해야한다고 제안했습니다. 당신이 data.table을 활용하고 싶어 그렇지 않은 경우는 매우 빠르게 사용하여 찾아 볼 수 있습니다 :

setkey(dat_long,variable) 
dat_long[J(c("ID1","ID2"))] 

    x variable  value 
1: A  ID1 0.2655087 
2: B  ID1 0.2059746 
3: C  ID1 0.9347052 
4: D  ID1 0.4820801 
5: E  ID1 0.8209463 
6: A  ID2 0.3721239 
7: B  ID2 0.1765568 
8: C  ID2 0.2121425 
9: D  ID2 0.5995658 
10: E  ID2 0.6470602 
관련 문제