سؤال

لدي مجموعة بيانات كبيرة (202 كيلو بايت). أعلم أن هناك 8 قيم تزيد عن 0.5. أريد مجموعة فرعية على تلك الصفوف.

كيف أجد/إرجاع قائمة أرقام الصف حيث تكون القيم> 0.5؟

هل كانت مفيدة؟

المحلول

إذا كانت مجموعة البيانات متجهًا اسمه x:

(1:length(x))[x > 0.5]

إذا كانت مجموعة البيانات عبارة x ومتغير الاهتمام في العمود j:

(1:nrow(x))[x[,j] > 0.5]

ولكن إذا كنت ترغب فقط في العثور على المجموعة الفرعية ولا تحتاج حقًا إلى أرقام الصفوف ، فاستخدمها

subset(x, x > 0.5)

لمتجه و

subset(x, x[,j] > 0.5)

لمصفوفة أو بيانات.

نصائح أخرى

which(x > 0.5)

إليك بعض البيانات الوهمية:

D<-matrix(c(0.6,0.1,0.1,0.2,0.1,0.1,0.23,0.1,0.8,0.2,0.2,0.2),nrow=3)

الذي يشبه:

> D
     [,1] [,2] [,3] [,4]
[1,]  0.6  0.2 0.23  0.2
[2,]  0.1  0.1 0.10  0.2
[3,]  0.1  0.1 0.80  0.2

وهنا فهرس الصف المنطقي ،

index <- (rowSums(D>0.5))>=1

يمكنك استخدامه لاستخراج الصفوف التي تريدها:

PeakRows <- D[index,]

الذي يشبه هذا:

> PeakRows
     [,1] [,2] [,3] [,4]
[1,]  0.6  0.2 0.23  0.2
[2,]  0.1  0.1 0.80  0.2

باستخدام الحجة arr.ind=TRUE مع which هي طريقة رائعة للعثور على أرقام الصف (أو العمود) حيث توجد شرط TRUE,

df <- matrix(c(0.6,0.2,0.1,0.25,0.11,0.13,0.23,0.18,0.21,0.29,0.23,0.51), nrow=4)

#      [,1] [,2] [,3]
# [1,] 0.60 0.11 0.21
# [2,] 0.20 0.13 0.29
# [3,] 0.10 0.23 0.23
# [4,] 0.25 0.18 0.51

which مع arr.ind=TRUE إرجاع مؤشرات الصفيف حيث تكون الحالة TRUE

which(df > 0.5, arr.ind=TRUE)
     row col
[1,]   1   1
[2,]   4   3

لذلك تصبح المجموعة الفرعية

df[-which(df > 0.5, arr.ind=TRUE)[, "row"], ]

#      [,1] [,2] [,3]
# [1,]  0.2 0.13 0.29
# [2,]  0.1 0.23 0.23
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top