سؤال

أنا أقوم بتشغيل البرنامج النصي التالي:

cause = c(1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2); 
time =  c(1, 1, 2, 3, 3, 2, 2, 1, 1, 2, 2); 
table(cause, time)

وأحصل على ما يلي:

    time
cause 1 2 3
    1 2 2 2
    2 2 3 0

ما أريده هو:

      time
cause     1 2 3
Maltreat  2 2 2
Non-Maltr 2 3 0

لذلك، سؤالي هو: كيف يمكنك إعادة تسمية صفوف جدول في ص؟

في نفس الوريد، كيف يمكنك إعادة تسمية أعمدة هذا الجدول؟

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

المحلول

طريقة واحدة للقيام بذلك هي استخدام العوامل أو قوائم السلاسل بدلا من الفهارس. وبالتالي:

cause1 <- c("Maltreat", "Non-malt")[cause]

> print(cause1)
 [1] "Maltreat" "Maltreat" "Maltreat" "Maltreat" "Maltreat" "Non-malt"
 [7] "Maltreat" "Non-malt" "Non-malt" "Non-malt" "Non-malt"

> table(cause1, time)
          time
cause1     1 2 3
  Maltreat 2 2 2
  Non-malt 2 3 0

وفي حال كنت قلقا من الذاكرة أو السرعة، فإن R جيد جدا في تمثيل هذا النوع من الأشياء داخليا بكفاءة، مع مجرد مثيل واحد من السلسلة بأكملها المخزنة، والباقي من الفهارس.

بالمناسبة، ستكون أكثر سعادة على المدى الطويل مع إطارات البيانات:

> df <- data.frame(cause=as.factor(c("Maltreat", "Non-malt")[cause]), time=time)
> summary(df)
      cause        time      
 Maltreat:6   Min.   :1.000  
 Non-malt:5   1st Qu.:1.000  
              Median :2.000  
              Mean   :1.818  
              3rd Qu.:2.000  
              Max.   :3.000  
> table(df)
          time
cause      1 2 3
  Maltreat 2 2 2
  Non-malt 2 3 0

نصائح أخرى

هناك طريقتان سهلان للقيام بذلك:

z <- table(cause, time)

استخدم وظائف Colnames / Rownames:

> colnames(z)
[1] "1" "2" "3"
> rownames(z)
[1] "1" "2"

أو استخدم Dimnames:

> dimnames(z)
$cause
[1] "1" "2"
$time
[1] "1" "2" "3"
> dimnames(z)$cause
[1] "1" "2"

في أي حال، اختر أسماءك كجاغر وتعيينها:

> dimnames(z)$cause <- c("Maltreat","Non-malt")
> z
          time
cause      1 2 3
  Maltreat 2 2 2
  Non-malt 2 3 0

لا تنسى قيادة "REVALUE" الرائعة PLYR "و" إعادة تسمية "!

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