저는 개인당 평균 과일 수를 계산하려고합니다 (평소 연습 데이터). 이 코드 줄 모두 완벽하게 잘 작동합니다tapply - NA 생성?
with(df, tapply(fruit, names, FUN = function(x) length(unique(x))))->uniques
sum(uniques)/length(unique(df$names))
aggregate(df[,"fruit"], by=list(id=names), FUN = function(x) length(unique(x)))->d1
sum(d1$x)/length(unique(df$names))
내 문제는 내 실제 데이터에 코드를 사용할 때 작동하지 않습니다. 내 실제 데이터는 처방 데이터이며, 나는 사람마다 고유 한 약물의 수를 의미합니다. tapply 코드를 사용하면 원래의 df에는없는 새로운 환자 ID를 만들 수 있습니다. 그것은 또한 NA 값의 1000s를 돌려 줬다. 총 코드 drug_code 열 중 하나
with(dt3, tapply(drug_code, id, FUN = function(x) length(unique(x))))->uniques
head(uniques)
uniques
Patient HAI0000001 NA
Patient HAI0000003 NA
Patient HAI0000008 NA
Patient HAI0000010 NA
Patient HAI0000014 NA
Patient HAI0000020 NA
table(dt3$id=="Patient HAI0000001") ##checking to see if HA10000001 occurs in original df. the dim of df are 228954 rows and 5 cols
FALSE
228954
에서 누락 된 내 ID 열의 값과 없음은 내가 오류가 없습니다 :
aggregate(dt3[,"drug_code"], by=list(id=id), FUN = function(x) length(unique(x)))->d1
Error in aggregate.data.frame(as.data.frame(x), ...) :
arguments must have same length
나는 일이 뭐죠 이해하지 않습니다. 내 실제 데이터는 ID col을 가지고 있고 마약/과일 열을 가지고 있다는 점에서 나의 연습 데이터와 비슷합니다. 어느 df에도 누락 된 데이터가 없습니다. 나는 lapply가 dataframes를 위해 더 나을 것을 안다. 그러나 나는 반드시 df back을 필요로하지 않는다. 그리고 어떤 경우 든 tapply 코드는 df 인 연습 데이터에서 작동합니다. 아무도 여기에서 무슨 일이 일어나고 있는지 전혀 모른다.
연습 DF : 실제 데이터의
names<-as.character(c("john", "john", "john", "john", "john", "mary", "mary","mary","mary","mary", "jim", "sylvia","ted","ted","mary", "sylvia", "jim", "ted", "john", "ted"))
dates<-as.Date(c("2010-07-01", "2010-09-01", "2010-11-01", "2010-12-01", "2011-01-01", "2010-08-12", "2010-11-11", "2010-05-12", "2010-12-03", "2010-07-12", "2010-12-21", "2010-02-18", "2010-10-29", "2010-08-13", "2010-11-11", "2010-05-12", "2010-04-01", "2010-05-06", "2010-09-28", "2010-11-28"))
fruit<-as.character(c("kiwi","apple","banana","orange","apple","orange","apple","orange", "apple", "apple", "pineapple", "peach", "nectarine", "grape", "melon", "apricot", "plum", "lychee", "watermelon", "apple"))
df<-data.frame(names,dates,fruit)
예 :
당신이 전나무에게 단일 번호 요청하고 있습니다 귀하의 경우에는head(dt3)
id quantity date_of_claim drug_code index
1 Patient HAI0000560 1 2009-10-15 R03AC02 2010-04-06
2 Patient HAI0000560 1 2009-10-15 R03AK06 2010-04-06
3 Patient HAI0000560 30 2009-10-15 R03BB04 2010-04-06
4 Patient HAI0000560 30 2009-10-15 A02BC01 2010-04-06
5 Patient HAI0000560 50 2009-10-15 M02AA15 2010-04-06
6 Patient HAI0000560 30 2009-10-15 N02BE51 2010-04-06
안녕하세요 Dwin, 응답 해 주셔서 감사합니다. 후행 공백은 코드를 전송할 때 내 부분에서 실수였습니다. 문제의 원인이 아닙니다. mean 함수를 사용하는 것이 내가하는 일보다 낫다. 그러나 이것은 문제가 아니다. 문제는 tapply입니다. 이러한 모든 Nas를 만들어서는 안됩니다. 더미 데이터에 대해서는 정상적으로 작동하지만 실제 데이터에서는 작동하지 않는 이유를 알 수 없습니다. dummydata는 tapply 코드의 모든 변수가 요인 변수라는 점에서 실제 데이터와 같습니다. 실제 데이터에는 Nas가 없으므로 tapply가 이들을 만드는 이유를 알지 못합니다. – user2363642
잠시만 기다려주세요. 내가 뭔가를 알아 낸 것 같아요. - - 계속 지켜봐주십시오. – user2363642
'dput (head (dt3)) '을 게시하면 더 나은 도움을 줄 수 있습니다. –