কীভাবে আর-তে গ্রুপ-সেন্টার / ভেরিয়েবলকে মানীকরণ করবেন?


9

আমি যে ফাংশনগুলির সাথে পরিচিত সেগুলিতে বেস আর থেকে স্কেল অন্তর্ভুক্ত করা হয় , এআরএম থেকে পুনরুদ্ধার

একাধিক ভেরিয়েবলকে গ্রুপিং ভেরিয়েবল হিসাবে উল্লেখ করার জন্য সম্ভবত প্রয়োগের কিছু বৈকল্পিক ব্যবহার করার সর্বোত্তম উপায় হবে।


চেষ্টা করুন: সমষ্টি (state.x77, তালিকা (অঞ্চল = state.region, ঠান্ডা = state.x77 [, "ফ্রস্ট"]> 130)), ফাংশন (এক্স) ((এক্স - গড় (এক্স)) / এসডি (এক্স) ))
সানকুলসু

উত্তর:


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)))

মূলত, ২ য় আর্গুমেন্ট কীভাবে ডেটা "বিভক্ত" করবেন তা তৃতীয় আর্গুমেন্ট প্রতিটি খণ্ডকে কীভাবে প্রয়োগ করতে হবে তা বর্ণনা করে। x.stdউপরেরগুলি ডেটা.ফ্রেমে একটি পরিবর্তনশীল যুক্ত করবে । xযদি আপনি ছোট আকারের মাধ্যমে আপনার মূল পরিবর্তনশীলটি প্রতিস্থাপন করতে চান তবে ব্যবহার করুন ।



3

এখানে একটি ডেটা.টিবেল সমাধান রয়েছে। এটি অবশ্যই প্লাইয়ারের চেয়ে দ্রুত (কেবলমাত্র বড় ডেটা সেটগুলির জন্য প্রাসঙ্গিক)। সম্ভবত পরে আমি একটি dplyr উদাহরণ করব।

# 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
দুটি কারণ সহ, এটি কোনও ডেটা.ফ্রেম ফেরত দেবে না। এজন্য আপনাকে ফলাফল পোস্ট-প্রক্রিয়া করতে হবে।
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

Tdyverse থেকে 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)))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.