আর-তে ডেটা কলামগুলিকে মানিক করুন


209

আমার কাছে একটি ডেটাসেট spamরয়েছে যার মধ্যে 58 টি কলাম এবং স্প্যাম বার্তাগুলি সম্পর্কিত প্রায় 3500 সারি ডেটা রয়েছে।

আমি ভবিষ্যতে এই ডেটাসেটটিতে কিছু লিনিয়ার রিগ্রেশন চালানোর পরিকল্পনা করছি, তবে আমি শূন্য গড় এবং একক বৈচিত্রের জন্য কলামগুলিকে আগেই কিছু প্রাক প্রসেসিং করতে এবং কলামগুলিকে মানিক করতে চাই।

এই বিষয়ে সবচেয়ে ভাল উপায়টি আমাকে আর এর সাথে জানানো হয়েছে, তাই আমি জিজ্ঞাসা করতে চাই যে আমি কীভাবে আর এর সাথে স্বাভাবিকতা অর্জন করতে পারি ? আমি ইতিমধ্যে সঠিকভাবে ডেটা লোড করেছি এবং আমি এই কাজটি সম্পাদন করার জন্য কিছু প্যাকেজ বা পদ্ধতি অনুসন্ধান করছি for

উত্তর:


533

আমি আপনাকে ধরে নেওয়ার অর্থ বোঝাতে চাইছি যে আপনি ০ এর গড় অর্থ এবং ১ এর মানক বিচ্যুতি চেয়েছিলেন scale

dat <- data.frame(x = rnorm(10, 30, .2), y = runif(10, 3, 5))
scaled.dat <- scale(dat)

# check that we get mean of 0 and sd of 1
colMeans(scaled.dat)  # faster version of apply(scaled.dat, 2, mean)
apply(scaled.dat, 2, sd)

ফাংশনে অন্তর্নির্মিত ব্যবহার করা উত্কৃষ্ট। এই বিড়ালের মতো:

এখানে চিত্র বর্ণনা লিখুন


24
হ্যাঁ আমার ভুল বলতে আমি বোঝাতে চাইছি 0 এবং এটি বেশ উত্কৃষ্ট বিড়াল
হোসার

8
প্রয়োগ ব্যবহার করে +1 এই চর্বিযুক্ত বিড়ালের মতোও ধীর হতে পারে :) (কলিমিয়ানস এখানে)
অস্থায়ী

1
@agstudy মেলা যথেষ্ট। আমার আরও কোলমিন / কলসাম ব্যবহার করার অভ্যাস করা উচিত in আমি এটি একটি অবস্থা যেখানে এটি আসলে বিষয়ে মনে করি না যদি না আমি ...
Dason

137
এই সাইটে আরও বিড়ালগুলির প্রয়োজন +1
লাভমাউ

35
সতর্কতা: স্কেল ডেটা ফ্রেমকে ম্যাট্রিক্সে রূপান্তরিত করে
জুলিয়ান কার্লস

88

প্রশ্নটি পুরানো এবং একটি উত্তর গৃহীত হয়েছে তা বুঝতে পেরে আমি রেফারেন্সের জন্য আরও একটি উত্তর সরবরাহ করব।

scaleএটি সমস্ত ভেরিয়েবলকে স্কেল করে । অন্যান্য ভেরিয়েবল অপরিবর্তিত রাখার সময় নীচের সমাধানটি কেবলমাত্র নির্দিষ্ট ভেরিয়েবলের নাম স্কেল করতে দেয় (এবং ভেরিয়েবলের নামগুলি গতিশীলভাবে উত্পন্ন হতে পারে):

library(dplyr)

set.seed(1234)
dat <- data.frame(x = rnorm(10, 30, .2), 
                  y = runif(10, 3, 5),
                  z = runif(10, 10, 20))
dat

dat2 <- dat %>% mutate_at(c("y", "z"), ~(scale(.) %>% as.vector))
dat2

যা আমাকে এটি দেয়:

> dat
          x        y        z
1  29.75859 3.633225 14.56091
2  30.05549 3.605387 12.65187
3  30.21689 3.318092 13.04672
4  29.53086 3.079992 15.07307
5  30.08582 3.437599 11.81096
6  30.10121 4.621197 17.59671
7  29.88505 4.051395 12.01248
8  29.89067 4.829316 12.58810
9  29.88711 4.662690 19.92150
10 29.82199 3.091541 18.07352

এবং

> dat2 <- dat %>% mutate_at(c("y", "z"), ~(scale(.) %>% as.vector))
> dat2
          x          y           z
1  29.75859 -0.3004815 -0.06016029
2  30.05549 -0.3423437 -0.72529604
3  30.21689 -0.7743696 -0.58772361
4  29.53086 -1.1324181  0.11828039
5  30.08582 -0.5946582 -1.01827752
6  30.10121  1.1852038  0.99754666
7  29.88505  0.3283513 -0.94806607
8  29.89067  1.4981677 -0.74751378
9  29.88711  1.2475998  1.80753470
10 29.82199 -1.1150515  1.16367556

সম্পাদনা 1 (2016) : অ্যাড্রেস জুলিয়ানদের মন্তব্য: আউটপুটটি scaleএনএক্স 1 ম্যাট্রিক্স তাই আদর্শভাবে আমাদের ম্যাট্রিক্স টাইপটিকে as.vectorভেক্টর টাইপের মধ্যে রূপান্তর করতে একটি যুক্ত করা উচিত । ধন্যবাদ জুলিয়ান!

সম্পাদনা 2 (2019) : ডুকিও এ'র মন্তব্য উদ্ধৃত: সর্বশেষ dplyr (সংস্করণ 0.8) এর জন্য আপনাকে dplyr :: ফান্যাক্স তালিকা সহ পরিবর্তন করতে হবে, যেমনdat %>% mutate_each_(list(~scale(.) %>% as.vector), vars=c("y","z"))

সম্পাদনা 3 (2020) : @ এমজে_ওয়েলসকে ধন্যবাদ: পুরাতন সমাধানটি অবচয় করা হয়েছে এবং এখন আমাদের ব্যবহার করা দরকার mutate_at


এই পদ্ধতিটি পুরোপুরি কার্যকর হয়, বিশেষত যখন আমার কাছে শ্রেণিবদ্ধ এবং সংখ্যাসূচক ভেরিয়েবলগুলির সংমিশ্রণ থাকে। আমার কেবল একটি প্রশ্ন আছে এই অপারেটরটির অর্থ "%>%" কি?
nooshinha

9
@ ওয়েবার 85, এটি একটি "পাইপ" অপারেটর (ক্রিয়ামূলক প্রোগ্রামিং থেকে)। লেখার পরিবর্তে এটি লেখার চেয়ে f(g(x))ভাল লাগবে onex %>% g %>% f । অন্য কথায়, dat %>% mutate_each_(funs(scale),vars=c("y","z"))ঠিক হয় mutate_each_(dat,funs(scale),vars=c("y","z"))। অপারেটর অনেক সাহায্য করে যখন একটি চেইন খুব দীর্ঘ হয় যেহেতু f(g(h(i(j(x)))))এটি পড়া খুব কঠিন হতে পারে।
আখমেদ

এই পদ্ধতির ব্যবহার করে যে কলামগুলিতে স্কেল প্রয়োগ করা হয় সেগুলি ভেক্টর (শ্রেণির সংখ্যাসূচক) থেকে এনএক্স 1 ম্যাট্রিক্সে স্থানান্তর করা হয়। এটি প্যাকেজগুলিতে কিছু ত্রুটি সৃষ্টি করতে পারে (যা আমার ক্ষেত্রে হয়েছে) যা ডেটাগুলির প্রতিটি কলামকে ধরে নেয় f ফ্রেমটি ভেক্টর।
জুলিয়ান কার্লস

2
সর্বশেষ জন্য dplyr(সংস্করণ 0.8) আপনি পরিবর্তন করতে হবে dplyr::funcsসঙ্গে list, মতdat %>% mutate_each_(list(~scale(.) %>% as.vector), vars=c("y","z"))
Duccio একজন

2
mutate_each_()এখন অবচয় করা হয়েছে। mutate_at()পরিবর্তে আপনি ব্যবহার করতে পারেন । এটি করার নতুন উপায়টি হ'ল:dat2 <- dat %>% mutate_at(c("y", "z"), scale)
উপায়টি হ'ল

60

এটি 3 বছরের পুরনো। তবুও, আমি মনে করি যে আমাকে নিম্নলিখিতগুলি যুক্ত করতে হবে:

সর্বাধিক সাধারণীকরণ হ'ল জেড-ট্রান্সফর্মেশন , যেখানে আপনি গড়টি বিয়োগ করেন এবং আপনার ভেরিয়েবলের স্ট্যান্ডার্ড বিচ্যুতি দ্বারা বিভাজন করে। ফলাফলটির অর্থ হবে = 0 এবং এসডি = 1।

তার জন্য, আপনার কোনও প্যাকেজ দরকার নেই।

zVar <- (myVar - mean(myVar)) / sd(myVar)

এটাই.


এটি সম্পাদন করার সম্পূর্ণ উপায়। ধন্যবাদ
পেড্রো Neves

এবং এটি ব্যবহার করে তোলে অনেক সহজ dplyr: mutate(var = (var - mean(var))/sd(var))
রবার্টমাইলস

তবে এটি কি দুটি ভেরিয়েবলের জেড স্কোর পেতে ব্যবহার করা যেতে পারে?
lf_araujo

অস্বীকৃতি জানাতে myVar <- (zVar * sd(zVar)) + mean(zVar), তাই না?
আর্টুর_ ইন্ডিও

4
প্রায় @Artur_Indio: newVar <- (zVar * sd(myVar)) + mean(myVar)। আপনাকে আসল গড় / এসডি ব্যবহার করতে হবে। আপনি যেমনটি লিখেছেন, আপনি দ্বারা বহুগুণ sd(zVar)=1এবং যুক্ত হবেন mean(zVar)=0, তাই কিছুই পরিবর্তন হবে না :)
এলোমেলো_আরোস্ট_ফ্যান্যাটিক

24

'ক্যারেট' প্যাকেজ ডেটা প্রিপ্রোসেসিংয়ের জন্য পদ্ধতি সরবরাহ করে (যেমন সেন্টারিং এবং স্কেলিং)। আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

library(caret)
# Assuming goal class is column 10
preObj <- preProcess(data[, -10], method=c("center", "scale"))
newData <- predict(preObj, data[, -10])

আরও বিশদ: http://www.inside-r.org/node/86978


17

আমি যখন ডেসন দ্বারা বর্ণিত সমাধানটি ব্যবহার করেছি, ফলস্বরূপ একটি ডেটা ফ্রেম পাওয়ার পরিবর্তে, আমি সংখ্যার একটি ভেক্টর পেয়েছি (আমার ডিএফের আকারযুক্ত মান)।

যদি কারও একই সমস্যা হয় তবে আপনাকে কোডটিতে as.data.frame () যুক্ত করতে হবে:

df.scaled <- as.data.frame(scale(df))

আমি আশা করি এটি একই সমস্যাযুক্ত পিপিএল জন্য কার্যকর হবে!


চমৎকার সমাধান! যদি কেউ কোনও কলামকে মাপসই করা থেকে বাদ দিতে চায় আপনি এটি এটি করতে পারেন: train_dt[-24] <- scale(train_dt[-24]) যেখানে "24" কলামের নম্বরটি বাদ দেওয়া হবে
নেটমেনুয়েল

13

আপনি সহজেই ডেটা ব্যবহার করে ডেটাটিকে সাধারণকরণ করতে পারেন us ক্লাস্টারসিম প্যাকেজে সাধারণকরণ ফাংশন। এটি ডেটা সাধারণকরণের বিভিন্ন পদ্ধতি সরবরাহ করে।

    data.Normalization (x,type="n0",normalization="column")

যুক্তি

এক্স
ভেক্টর, ম্যাট্রিক্স বা ডেটাसेट টাইপ
সাধারণকরণ: এন0 - সাধারণকরণ ছাড়াই

এন 1 - মানককরণ ((এক্স-গড়) / এসডি)

এন 2 - অবস্থানগত মান ((এক্স-মিডিয়ান) / পাগল)

এন 3 - ইউনিটাইজেশন ((এক্স-গড়) / পরিসর)

n3a - অবস্থানগত একককরণ ((এক্স-মিডিয়ান) / পরিসর)

এন 4 - নূন্যতম নূন্যতম ((এক্স-মিনিট / রেঞ্জ) সহ একককরণ

এন 5 - পরিসরে নর্মালাইজেশন <-1,1> ((এক্স-গড়) / সর্বাধিক (অ্যাবস (এক্স-গড়)))

এন 5 এ - << -1,1> ((এক্স-মিডিয়ান) / সর্বাধিক (অ্যাবস (এক্স-মিডিয়ান)) সীমাতে অবস্থানগত স্বাভাবিককরণ

n6 - ভাগফল রূপান্তর (এক্স / এসডি)

n6a - অবস্থানগত ভাগফল রূপান্তর (এক্স / পাগল)

n7 - ভাগফল রূপান্তর (এক্স / রেঞ্জ)

n8 - ভাগফল রূপান্তর (এক্স / সর্বাধিক)

n9 - ভাগফল রূপান্তর (এক্স / গড়)

n9a - অবস্থানগত ভাগফল রূপান্তর (এক্স / মিডিয়ান)

n10 - ভাগফল রূপান্তর (x / যোগফল)

এন 11 - ভাগফল রূপান্তর (এক্স / স্কয়ার্ট (এসএসকিউ))

এন 12 - সাধারণীকরণ ((এক্স-গড়) / স্কয়ার্ট (যোগফল ((এক্স-গড়) mean 2%)))

n12a - অবস্থানগত স্বাভাবিককরণ ((এক্স-মিডিয়ান) / স্কয়ার্ট (যোগফল ((এক্স-মিডিয়ান) med 2%)))

এন 13 - শূন্যের কেন্দ্রীয় বিন্দু ((এক্স-মিডরেঞ্জ) / (পরিসর / 2)) সহ সাধারণকরণ

নরমালাইজেশন
"কলাম" - ভেরিয়েবল দ্বারা নরমালাইজেশন, "সারি" - বস্তু দ্বারা সাধারণকরণ


এই প্যাকেজটি আর সংস্করণ
৩.৪.৩-এর

11

dplyrV0.7.4 এর সাহায্যে সমস্ত ভেরিয়েবলগুলি ব্যবহার করে ছোট করা যায় mutate_all():

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(tibble)

set.seed(1234)
dat <- tibble(x = rnorm(10, 30, .2), 
              y = runif(10, 3, 5),
              z = runif(10, 10, 20))

dat %>% mutate_all(scale)
#> # A tibble: 10 x 3
#>         x      y       z
#>     <dbl>  <dbl>   <dbl>
#>  1 -0.827 -0.300 -0.0602
#>  2  0.663 -0.342 -0.725 
#>  3  1.47  -0.774 -0.588 
#>  4 -1.97  -1.13   0.118 
#>  5  0.816 -0.595 -1.02  
#>  6  0.893  1.19   0.998 
#>  7 -0.192  0.328 -0.948 
#>  8 -0.164  1.50  -0.748 
#>  9 -0.182  1.25   1.81  
#> 10 -0.509 -1.12   1.16

নির্দিষ্ট ভেরিয়েবলগুলি ব্যবহার করে বাদ দেওয়া যেতে পারে mutate_at():

dat %>% mutate_at(scale, .vars = vars(-x))
#> # A tibble: 10 x 3
#>        x      y       z
#>    <dbl>  <dbl>   <dbl>
#>  1  29.8 -0.300 -0.0602
#>  2  30.1 -0.342 -0.725 
#>  3  30.2 -0.774 -0.588 
#>  4  29.5 -1.13   0.118 
#>  5  30.1 -0.595 -1.02  
#>  6  30.1  1.19   0.998 
#>  7  29.9  0.328 -0.948 
#>  8  29.9  1.50  -0.748 
#>  9  29.9  1.25   1.81  
#> 10  29.8 -1.12   1.16

ডিপেক্স প্যাকেজ (v0.2.0) দ্বারা 2018-04-24 এ তৈরি হয়েছিল ।


9

আবার যদিও এটি একটি পুরানো প্রশ্ন, এটি খুব প্রাসঙ্গিক! এবং আমি কোনও প্যাকেজের প্রয়োজন ছাড়াই নির্দিষ্ট কলামগুলিকে সাধারণ করার সহজ উপায় খুঁজে পেয়েছি:

normFunc <- function(x){(x-mean(x, na.rm = T))/sd(x, na.rm = T)}

উদাহরণ স্বরূপ

x<-rnorm(10,14,2)
y<-rnorm(10,7,3)
z<-rnorm(10,18,5)
df<-data.frame(x,y,z)

df[2:3] <- apply(df[2:3], 2, normFunc)

আপনি দেখতে পাবেন যে y এবং z কলামগুলি স্বাভাবিক করা হয়েছে। কোনও প্যাকেজ দরকার নেই :-)


8

স্কেল পুরো ডেটা ফ্রেম এবং নির্দিষ্ট কলাম উভয়ের জন্য ব্যবহার করা যেতে পারে। নির্দিষ্ট কলামগুলির জন্য, নিম্নলিখিত কোড ব্যবহার করা যেতে পারে:

trainingSet[, 3:7] = scale(trainingSet[, 3:7]) # For column 3 to 7
trainingSet[, 8] = scale(trainingSet[, 8]) # For column 8 

সম্পূর্ণ ডেটা ফ্রেম

trainingSet <- scale(trainingSet)

3

dplyrপ্যাকেজ দুটি ফাংশন যে এই কাজ হয়েছে।

> require(dplyr)

ডেটা টেবিলের নির্দিষ্ট কলামগুলিকে পরিবর্তন করতে, আপনি ফাংশনটি ব্যবহার করতে পারেন mutate_at()সমস্ত কলাম পরিবর্তন করতে, আপনি ব্যবহার করতে পারেন mutate_all

ডেটা মানক করার জন্য এই ফাংশনগুলি ব্যবহার করার জন্য নিম্নলিখিতটি একটি সংক্ষিপ্ত উদাহরণ।

নির্দিষ্ট কলামগুলিকে মিউটেট করুন:

dt = data.table(a = runif(3500), b = runif(3500), c = runif(3500))
dt = data.table(dt %>% mutate_at(vars("a", "c"), scale)) # can also index columns by number, e.g., vars(c(1,3))

> apply(dt, 2, mean)
            a             b             c 
 1.783137e-16  5.064855e-01 -5.245395e-17 

> apply(dt, 2, sd)
        a         b         c 
1.0000000 0.2906622 1.0000000 

সমস্ত কলামকে মিউটেট করুন:

dt = data.table(a = runif(3500), b = runif(3500), c = runif(3500))
dt = data.table(dt %>% mutate_all(scale))

> apply(dt, 2, mean)
            a             b             c 
-1.728266e-16  9.291994e-17  1.683551e-16 

> apply(dt, 2, sd)
a b c 
1 1 1 

1

এই থ্রেডটি আবিষ্কার করার আগে আমারও একই সমস্যা ছিল। আমার ব্যবহারকারীর উপর নির্ভরশীল কলামের ধরণ ছিল, তাই আমি forসেগুলির মধ্য দিয়ে একটি লুপ লিখেছিলাম এবং প্রয়োজনীয় কলামগুলি পেয়েছি scale। এটি করার আরও ভাল উপায় আছে তবে এটি সমস্যার সমাধান ঠিকঠাক করে:

 for(i in 1:length(colnames(df))) {
        if(class(df[,i]) == "numeric" || class(df[,i]) == "integer") {
            df[,i] <- as.vector(scale(df[,i])) }
        }

as.vectorএটি একটি প্রয়োজনীয় অংশ, কারণ এটি প্রমাণিত হয়েছে scaleযে rownames x 1ম্যাট্রিক্স যা সাধারণত আপনি যা চান তা নয় data.frame


0

"সুপারিশরেব" প্যাকেজটি ব্যবহার করুন। প্যাকেজটি ডাউনলোড এবং ইনস্টল করুন। এই প্যাকেজটিতে অন্তর্নির্মিত "নরমালাইজ" কমান্ড রয়েছে। এটি আপনাকে সাধারণকরণের জন্য 'সেন্টার' বা 'জেড-স্কোর' এর অনেকগুলি পদ্ধতির একটি বেছে নিতে দেয় নীচের উদাহরণটি অনুসরণ করুন:

## create a matrix with ratings
m <- matrix(sample(c(NA,0:5),50, replace=TRUE, prob=c(.5,rep(.5/6,6))),nrow=5, ncol=10, dimnames = list(users=paste('u', 1:5, sep=&rdquo;), items=paste('i', 1:10, sep=&rdquo;)))

## do normalization
r <- as(m, "realRatingMatrix")
#here, 'centre' is the default method
r_n1 <- normalize(r) 
#here "Z-score" is the used method used
r_n2 <- normalize(r, method="Z-score")

r
r_n1
r_n2

## show normalized data
image(r, main="Raw Data")
image(r_n1, main="Centered")
image(r_n2, main="Z-Score Normalization")

1
এই উত্তরটি প্রশ্নের সমাধান করে না।
f0nzie

0

স্বাভাবিক যেহেতু এটি এন মান মোকাবেলা করতে পারেন BBMisc প্যাকেজ থেকে ফাংশন আমার জন্য ডান টুল ছিল।

এটি কীভাবে ব্যবহার করবেন তা এখানে:

নিম্নলিখিত ডেটাসেট দেওয়া,

    ASR_API     <- c("CV",  "F",    "IER",  "LS-c", "LS-o")
    Human       <- c(NA,    5.8,    12.7,   NA, NA)
    Google      <- c(23.2,  24.2,   16.6,   12.1,   28.8)
    GoogleCloud <- c(23.3,  26.3,   18.3,   12.3,   27.3)
    IBM     <- c(21.8,  47.6,   24.0,   9.8,    25.3)
    Microsoft   <- c(29.1,  28.1,   23.1,   18.8,   35.9)
    Speechmatics    <- c(19.1,  38.4,   21.4,   7.3,    19.4)
    Wit_ai      <- c(35.6,  54.2,   37.4,   19.2,   41.7)
    dt     <- data.table(ASR_API,Human, Google, GoogleCloud, IBM, Microsoft, Speechmatics, Wit_ai)
> dt
   ASR_API Human Google GoogleCloud  IBM Microsoft Speechmatics Wit_ai
1:      CV    NA   23.2        23.3 21.8      29.1         19.1   35.6
2:       F   5.8   24.2        26.3 47.6      28.1         38.4   54.2
3:     IER  12.7   16.6        18.3 24.0      23.1         21.4   37.4
4:    LS-c    NA   12.1        12.3  9.8      18.8          7.3   19.2
5:    LS-o    NA   28.8        27.3 25.3      35.9         19.4   41.7

সাধারণ মানগুলি এর মতো পাওয়া যায়:

> dtn <- normalize(dt, method = "standardize", range = c(0, 1), margin = 1L, on.constant = "quiet")
> dtn
   ASR_API      Human     Google GoogleCloud         IBM  Microsoft Speechmatics      Wit_ai
1:      CV         NA  0.3361245   0.2893457 -0.28468670  0.3247336  -0.18127203 -0.16032655
2:       F -0.7071068  0.4875320   0.7715885  1.59862532  0.1700986   1.55068347  1.31594762
3:     IER  0.7071068 -0.6631646  -0.5143923 -0.12409420 -0.6030768   0.02512682 -0.01746131
4:    LS-c         NA -1.3444981  -1.4788780 -1.16064578 -1.2680075  -1.24018782 -1.46198764
5:    LS-o         NA  1.1840062   0.9323361 -0.02919864  1.3762521  -0.15435044  0.32382788

যেখানে হাতে গণনা করা পদ্ধতিটি কেবল এনএযুক্ত কলমগুলিকে উপেক্ষা করে:

> dt %>% mutate(normalizedHuman = (Human - mean(Human))/sd(Human)) %>% 
+ mutate(normalizedGoogle = (Google - mean(Google))/sd(Google)) %>% 
+ mutate(normalizedGoogleCloud = (GoogleCloud - mean(GoogleCloud))/sd(GoogleCloud)) %>% 
+ mutate(normalizedIBM = (IBM - mean(IBM))/sd(IBM)) %>% 
+ mutate(normalizedMicrosoft = (Microsoft - mean(Microsoft))/sd(Microsoft)) %>% 
+ mutate(normalizedSpeechmatics = (Speechmatics - mean(Speechmatics))/sd(Speechmatics)) %>% 
+ mutate(normalizedWit_ai = (Wit_ai - mean(Wit_ai))/sd(Wit_ai))
  ASR_API Human Google GoogleCloud  IBM Microsoft Speechmatics Wit_ai normalizedHuman normalizedGoogle
1      CV    NA   23.2        23.3 21.8      29.1         19.1   35.6              NA        0.3361245
2       F   5.8   24.2        26.3 47.6      28.1         38.4   54.2              NA        0.4875320
3     IER  12.7   16.6        18.3 24.0      23.1         21.4   37.4              NA       -0.6631646
4    LS-c    NA   12.1        12.3  9.8      18.8          7.3   19.2              NA       -1.3444981
5    LS-o    NA   28.8        27.3 25.3      35.9         19.4   41.7              NA        1.1840062
  normalizedGoogleCloud normalizedIBM normalizedMicrosoft normalizedSpeechmatics normalizedWit_ai
1             0.2893457   -0.28468670           0.3247336            -0.18127203      -0.16032655
2             0.7715885    1.59862532           0.1700986             1.55068347       1.31594762
3            -0.5143923   -0.12409420          -0.6030768             0.02512682      -0.01746131
4            -1.4788780   -1.16064578          -1.2680075            -1.24018782      -1.46198764
5             0.9323361   -0.02919864           1.3762521            -0.15435044       0.32382788

(নরমালাইজড হিউম্যানকে এনএ-এর একটি তালিকা তৈরি করা হয়েছে ...)

গণনার জন্য নির্দিষ্ট কলামগুলির নির্বাচন সম্পর্কিত, একটি জেনেরিক পদ্ধতিটি এর মতো ব্যবহার করা যেতে পারে:

data_vars <- df_full %>% dplyr::select(-ASR_API,-otherVarNotToBeUsed)
meta_vars <- df_full %>% dplyr::select(ASR_API,otherVarNotToBeUsed)
data_varsn <- normalize(data_vars, method = "standardize", range = c(0, 1), margin = 1L, on.constant = "quiet")
dtn <- cbind(meta_vars,data_varsn)

0

@ বিবিকিম খুব ভাল উত্তর দিয়েছে, তবে এটি আরও কম করা যেতে পারে। আমি অবাক হয়েছি এখনও কোনটা এলো না।

dat <- data.frame(x = rnorm(10, 30, .2), y = runif(10, 3, 5)) dat <- apply(dat, 2, function(x) (x - mean(x)) / sd(x))

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