Saya ingin membuat fungsi di R untuk membandingkan "Nilai Baris Saat Ini" dan "Nilai Baris Sebelumnya. Sebuah. Jika Nilai Baris Saat Ini lebih rendah dari Nilai Baris Sebelumnya maka kembalikan kata LOW b. Jika Nilai Baris Saat Ini lebih tinggi dari Nilai Sebelumnya maka kembalikan kata TINGGI c. Jika Nilai Baris Saat Ini sama dengan Nilai Baris Sebelumnya maka kembalikan kata EQUAL

Saya ingin membuat KOLOM baru bernama Keputusan di mana kata-kata akan disimpan seperti di bawah ini

Keputusan Nilai

1 T/A

2 TINGGI

1,5 RENDAH

1.4 RENDAH

1.4 SAMA

r
1
prog101 28 Maret 2020, 23:08

1 menjawab

Jawaban Terbaik

Kita dapat menggunakan case_when untuk membandingkan 'Nilai' dengan 'Nilai' sebelumnya (lag) dan membuat kolom 'Keputusan' berdasarkan apakah lebih rendah atau lebih tinggi

library(dplyr)
df1 %>%
 mutate(Decision = case_when(Value < lag(Value) ~ "LOW", 
     Value > lag(Value) ~ "HIGH", Value == lag(Value) ~ "EQUAL"))
#  Value Decision
#1   1.0     <NA>
#2   2.0     HIGH
#3   1.5      LOW
#4   1.4      LOW
#5   1.4    EQUAL

Atau opsi lain adalah mengambil perbedaannya dan kemudian mengubah labels di factor

with(df1, c(NA_character_, 
    as.character(factor(sign(Value[-length(Value)] - Value[-1]),         
       levels = c(-1, 1, 0), labels = c("HIGH", "LOW", "EQUAL")))))
#[1] NA      "HIGH"  "LOW"   "LOW"   "EQUAL"

Atau menggunakan loop for

df1$Decision <- rep(NA_character_, nrow(df1))
for(i in 2: nrow(df1)){
    if(df1$Value[i] > df1$Value[i-1]){
       df1$Decision[i] <- "HIGH"
      } else if(df1$Value[i] < df1$Value[i-1]) {

        df1$Decision[i] <- "LOW"
       } else df1$Decision[i] <- "EQUAL"


   }

Jika perlu menjadi fungsi

f1 <- function(dat, colNm, newCol) {
  dat[[newCol]] <- rep(NA_character_, nrow(dat))
    for(i in 2: nrow(dat)){
        if(dat[[colNm]][i] > dat[[colNm]][i-1]){
           dat[[newCol]][i] <- "HIGH"
          } else if(dat[[colNm]][i] < dat[[colNm]][i-1]) {

            dat[[newCol]][i] <- "LOW"
           } else dat[[newCol]][i] <- "EQUAL"


       }
     dat
   }

f1(df1, "Value", "Decision")

Data

df1 <- structure(list(Value = c(1, 2, 1.5, 1.4, 1.4)), class = "data.frame",
     row.names = c(NA, 
-5L))
1
akrun 28 Maret 2020, 23:24