R에서 큰 데이터 프레임으로 작업하고 있으며 데이터 프레임의 다른 변수에 저장된 제한을 초과하는 열의 수를 각 행으로 계산해야합니다.데이터 프레임의 값을 초과하는 열의 카운트 수
ID NT1 NT2 NT3 NT4 NT5 NT6 Limit1 Limit2
1 001 1 1 1 NA NA NA 2 3
2 002 2 1 5 4 NA NA 2 3
3 003 3 NA 1 NA 1 NA 2 3
4 004 3 NA 3 NA 8 NA 2 3
5 005 4 5 1 NA NA NA 4 5
6 006 9 9 9 NA NA 8 8 9
7 007 1 3 5 9 NA NA 5 4
8 008 NA NA 6 7 9 8 6 5
9 009 1 1 NA NA NA NA 1 2
10 010 3 4 5 5 5 5 2 2
내가 그의 이름 NT
로 시작하고 그 Limit1
라는 이름의 열을 초과하는 열을 계산해야이 (내가 마지막면에 dput()
버전을 추가)처럼 내 dataframe Base
보인다. 이 값은 다른 열에 저장해야합니다. 동일한 케이스의 경우 Limit2
NT
으로 시작하고 Limit2
의 값을 초과해야하는 열을 계산해야합니다. 결과를 새 열에 저장해야합니다. 나는 다음 코드를 사용하여 시도했지만 작동하지 않습니다 :
Base$Count1=apply(Base[c(2:7,8)],1,function(x) length(which(x>Base[8] & !is.na(x))))
또한, 그리고 중요한 사실은, Base
200000 행 60 열이 큰 dataframe의 샘플입니다. 이러한 이유로 내 apply
테스트가 완료되지 않거나 오류가 발생합니다. Count1
가 Limit1
를 초과하는 열 수를 저장
ID NT1 NT2 NT3 NT4 NT5 NT6 Limit1 Limit2 Count1 Count2
1 001 1 1 1 NA NA NA 2 3 0 0
2 002 2 1 5 4 NA NA 2 3 2 2
3 003 3 NA 1 NA 1 NA 2 3 1 0
4 004 3 NA 3 NA 8 NA 2 3 3 1
5 005 4 5 1 NA NA NA 4 5 1 0
6 006 9 9 9 NA NA 8 8 9 3 0
7 007 1 3 5 9 NA NA 5 4 1 2
8 008 NA NA 6 7 9 8 6 5 3 4
9 009 1 1 NA NA NA NA 1 2 0 0
10 010 3 4 5 5 5 5 2 2 6 6
이 NT
시작 그들은 NA
을하지 않은 :이 같은 결과를 얻을 싶습니다. Limit2
을 사용하는 경우는 Count2
과 동일합니다. 내 datafrmae의 dput()
버전은 다음입니다 :
Base<-structure(list(ID = c("001", "002", "003", "004", "005", "006",
"007", "008", "009", "010"), NT1 = c(1, 2, 3, 3, 4, 9, 1, NA,
1, 3), NT2 = c(1, 1, NA, NA, 5, 9, 3, NA, 1, 4), NT3 = c(1, 5,
1, 3, 1, 9, 5, 6, NA, 5), NT4 = c(NA, 4, NA, NA, NA, NA, 9, 7,
NA, 5), NT5 = c(NA, NA, 1, 8, NA, NA, NA, 9, NA, 5), NT6 = c(NA,
NA, NA, NA, NA, 8, NA, 8, NA, 5), Limit1 = c(2, 2, 2, 2, 4, 8,
5, 6, 1, 2), Limit2 = c(3, 3, 3, 3, 5, 9, 4, 5, 2, 2)), .Names = c("ID",
"NT1", "NT2", "NT3", "NT4", "NT5", "NT6", "Limit1", "Limit2"), row.names = c(NA,
-10L), class = "data.frame")
많은 도움을 주셔서 감사합니다.