حدد قيمة بناءً على أعلى قيمة في عمود آخر

StackOverflow https://stackoverflow.com//questions/10705290

  •  13-12-2019
  •  | 
  •  

سؤال

لا أفهم لماذا لا أستطيع إيجاد حل لهذا، لأنني أشعر أن هذا سؤال أساسي جدًا.بحاجة لطلب المساعدة، ثم.أرغب في إعادة ترتيب مجموعة بيانات جودة الهواء حسب الشهر مع الحد الأقصى لقيمة درجة الحرارة لكل شهر.بالإضافة إلى ذلك، أريد العثور على اليوم المقابل لكل درجة حرارة شهرية قصوى.ما هي الطريقة الأكثر كسلاً (من حيث الكود) للقيام بذلك؟

لقد حاولت المتابعة دون نجاح:

require(reshape2)
names(airquality) <- tolower(names(airquality))
mm <- melt(airquality, id.vars = c("month", "day"), meas = c("temp"))

dcast(mm, month + day ~ variable, max)
aggregate(formula = temp ~ month + day, data = airquality, FUN = max)

أنا بعد شيء من هذا القبيل:

month day temp
5     7    89
...
هل كانت مفيدة؟

المحلول

كان هناك نقاش منذ فترة طويلة حول ما إذا كان الكسل أمرًا جيدًا أم لا.على أية حال، هذا أمر قصير وطبيعي للكتابة والقراءة (وهو سريع للبيانات الكبيرة لذا لا تحتاج إلى تغييره أو تحسينه لاحقًا):

require(data.table)
DT=as.data.table(airquality)

DT[,.SD[which.max(Temp)],by=Month]

     Month Ozone Solar.R Wind Temp Day
[1,]     5    45     252 14.9   81  29
[2,]     6    NA     259 10.9   93  11
[3,]     7    97     267  6.3   92   8
[4,]     8    76     203  9.7   97  28
[5,]     9    73     183  2.8   93   3

.SD هي مجموعة فرعية من البيانات لكل مجموعة، وتريد فقط الصف منها بأكبر درجة حرارة، iiuc.إذا كنت بحاجة إلى رقم الصف، فيمكن إضافته.

أو للحصول على جميع الصفوف التي تم ربط الحد الأقصى بها:

DT[,.SD[Temp==max(Temp)],by=Month]

     Month Ozone Solar.R Wind Temp Day
[1,]     5    45     252 14.9   81  29
[2,]     6    NA     259 10.9   93  11
[3,]     7    97     267  6.3   92   8
[4,]     7    97     272  5.7   92   9
[5,]     8    76     203  9.7   97  28
[6,]     9    73     183  2.8   93   3
[7,]     9    91     189  4.6   93   4

نصائح أخرى

نهج آخر مع plyr

giveacodicetagpre.

يعطي

giveacodicetagpre.

أو، حتى أكثر بساطة

giveacodicetagpre.

ماذا عن plyr؟

giveacodicetagpre.

كما ترون، يحدث درجة حرارة ماكس لهذا الشهر أكثر من يوم واحد.إذا كنت تريد سلوكا مختلفا، فهذه الدالة سهلة لضبطها.

أو إذا كنت ترغب في استخدام data.table الحزمة (على سبيل المثال، إذا كانت السرعة مشكلة وكانت مجموعة البيانات كبيرة أو إذا كنت تفضل بناء الجملة):

library(data.table)
DT <- data.table(airquality)
DT[, list(maxTemp=max(Temp), dayMaxTemp=.SD[max(Temp)==Temp, Day]), by="Month"]

إذا كنت تريد أن تعرف ما .SD لتقف على، إلقاء نظرة هنا: لذا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top