आर में समूह-केंद्र / मानकीकरण कैसे करें?


9

कार्य मैं से परिचित हूँ शामिल पैमाने आधार आर, से rescale एआरएम से।

शायद सबसे अच्छा तरीका समूह के चर के रूप में उपयोग करने के लिए एक या एक से अधिक चर निर्दिष्ट करते हुए, लागू के कुछ प्रकार का उपयोग करना होगा।


कोशिश करें: समुच्चय (राज्य। X77, सूची (क्षेत्र = राज्य। भाग, शीत = राज्य। x77 [, "फ्रॉस्ट"]> 130)), फ़ंक्शन (x) ((x - माध्य (x)) / sd (x) ))
सनकूलू

जवाबों:


7

यहाँ एक संभावित प्लायर समाधान है। ध्यान दें कि यह आधार transform()फ़ंक्शन पर निर्भर करता है।

my.df <- data.frame(x=rnorm(100, mean=10), 
                    sex=sample(c("M","F"), 100, rep=T), 
                    group=gl(5, 20, labels=LETTERS[1:5]))
library(plyr)
ddply(my.df, c("sex", "group"), transform, x.std = scale(x))

(हम यह जांच सकते हैं कि क्या यह उदाहरण के साथ अपेक्षित है with(subset(my.df, sex=="F" & group=="A"), scale(x)))

मूल रूप से, 2 तर्क बताता है कि डेटा को "विभाजित" कैसे किया जाए, 3 तर्क प्रत्येक चंक पर लागू करने के लिए क्या कार्य करता है। उपरोक्त x.stdडेटा के लिए एक चर संलग्न करेगा । xयदि आप अपने मूल चर को स्केल किए गए एक से बदलना चाहते हैं तो उपयोग करें ।



3

यहाँ एक डेटा है। समाधान। यह निश्चित रूप से प्लाई से तेज है (केवल बड़े डेटा सेट के लिए प्रासंगिक है)। हो सकता है कि बाद में मैं इसका उदाहरण दूंगा।

# generate example data
raw.data <- data.frame( outcome = c(rnorm(500, 100, 15), rnorm(500, 110, 12)), 
                        group = c(rep("a", 500), rep("b", 500)))

library(data.table)
# convert dataframe to data.table
raw.data <- data.table(raw.data, key = "group")

# create group standardized outcome variable
raw.data[ , group_std_outcome := (outcome - mean(outcome, na.rm = TRUE)) /  
           sd(outcome, na.rm = TRUE), "group"]

(हां, मैंने एक सवाल पूछा था जो मैंने सालों पहले पूछा था जब मैं एक आर नोब था;)


2

आप (दूसरों के बीच) का उपयोग कर सकते tapplyइस लिए ( plyrपैकेज अन्य विकल्प है कि बेहतर अपने विशिष्ट स्थिति के लिए अनुकूल हो सकता है की बहुत सारी शामिल हैं):

tapply(variabletoscale, list(groupvar1, groupvar2), scale)

1
दो कारकों के साथ, यह एक data.frame नहीं लौटाएगा। आपको उसके लिए परिणाम को पोस्ट-प्रोसेस करना होगा।
chl

0

यह उत्तर महमूद अरी द्वारा एक श्वेत पत्र से है। इसमें उपसर्ग "सी" के साथ केंद्रित परिणामों को लेबल करने का सुविधाजनक पक्ष प्रभाव है:

gcenter <- function(df1,group) {
        variables <- paste(
              rep("C", ncol(df1)),  colnames(df1), sep=".")
        copydf <- df1
        for (i in 1:ncol(df1)) {
              copydf[,i] <- df1[,i] - ave(df1[,i], group, FUN=mean)}
        colnames(copydf) <- variables
        return(cbind(df1,copydf))}

0

यहाँ tidyverse से dplyr का उपयोग करके एक अद्यतन कार्यान्वयन है ।

library(tidyverse)

my.df <- data.frame(x=rnorm(100, mean=10), sex=sample(c("M","F"), 100, rep=T))
my.df <- group_by(my.df, sex) %>% mutate(x.sd = as.numeric(scale(x)))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.