2017-10-18 7 views
0

나는 다른 분야가있는 안양을 가지고 있으며 각 필드는 다른 데이터 유형이있다 : 날짜, 숫자, 요소 등의 예를 들어기능 숫자 유형의 평균을 반환

ID<- c(1,2,3) 
AGE <- c(25,32,28) 
SEX <- c(1,0,0) 
HEIGHT <- c(152,172, 163) 
WEIGHT <-c(65,53,70) 
DF<-data.frame(ID, AGE, SEX, HEIGHT, WEIGHT) 

내가 가지고있는 여러 데이터 세트 등이 이 중 하나, 따라서 요약을 반환하는 함수를 만들고 싶습니다. 이 요약은 필드의 평균, 필드가 숫자 일 때만 필드가 요소 인 경우 레벨 수로 구성됩니다.

+1

[데이터 프레임에서 유일한 숫자 열 선택] 가능 중복 (https://stackoverflow.com/questions/5863097/selecting-only-numeric-columns-from-a-data -frame) – lebelinoz

+0

예제 데이터의 모든 유형은 숫자입니다. 문제에 해당하는 예제 (다른 유형의 _i.e._)를 제공 할 수 있습니까? – neilfws

+0

열 유형이'data.frame'에 지정되어 있는지 확인하십시오. 예를 들어 'ID'와 'SEX'는 '요인'(또는 적어도 '문자')이어야합니다. 다음과 같이 사용할 수 있습니다 :'sapply (DF, function (x) if (is.numeric (x)) (x) else length (unique (x)))'. – A5C1D2H2I1M1N2O1R2T1

답변

0

"필드가 요인 인 경우 레벨 수"라는 제약 조건은 약간 단순화되었습니다. 필드가 character이면 어떻게 될까요? logical?

첫 번째 예. 나는 factor의 벡터를 추가 할 것입니다 :

FAC <- c('abc','abc','def') 
DF <- data.frame(ID, AGE, SEX, HEIGHT, WEIGHT, FAC) 
lapply(DF, function(x) if (is.numeric(x)) mean(x) else length(levels(x))) 
# $ID 
# [1] 2 
# $AGE 
# [1] 28.33333 
# $SEX 
# [1] 0.3333333 
# $HEIGHT 
# [1] 162.3333 
# $WEIGHT 
# [1] 62.66667 
# $FAC 
# [1] 2 

더 제어 할 필요가 있다면, 아마도 당신이 그것을 확장 할 수 있습니다 : 당신은 확실히 몇 가지를 결합 할 수

lapply(DF, function(x) { 
    if (is.logical(x)) x <- 1*x     # turns into numeric, will show percentage of TRUE 
    if (is.numeric(x)) return(mean(x))    # mean 
    if (is.factor(x)) return(length(levels(x))) # number of levels 
    if (is.character(x)) return(length(unique(x))) # number of distinct strings, similar to levels 
    if (inherits(x, "POSIXct")) return(min(x))  # min date/time 
    return("oops") 
}) 

같은 is.numeric(x) || is.logical(x) 또는 is.numeric(x) || inherits(x, "POSIXct)을 .

0
ID<- factor(c(1,2,3)) 

AGE <- c(25,32,28) 
SEX <- factor(c('Male','Female','Male')) 
HEIGHT <- c(152,172, 163) 
WEIGHT <-c(65,53,70) 

DF<-data.frame(ID, AGE, SEX, HEIGHT, WEIGHT) 

# df_summary <- function(df) { 
# col_types <- sapply(df,class) 
# return(col_types) 
# } 

df_summary <- function(df) { 
    numeric_cols <- df[,which(sapply(df, class) == "numeric")] 
    numeric_means_df <- data.frame('Mean' = sapply(numeric_cols,mean)) 
    factor_cols <- df[,which(sapply(df,class) == 'factor')] 
    factor_cols_summary <- summary(factor_cols) 
    return(list('Numeric' = numeric_means_df,'Factors' = factor_cols_summary)) 

} 

print(df_summary(DF)) 

enter image description here