Добавить столбец в фрейм данных в R на основе значения терка / меньше, чем на основе значений в существующих столбцах - PullRequest
0 голосов
/ 20 января 2020

У меня есть фрейм данных, и я хочу создать новый столбец Z, заполненный значением «tw» или «ok» для каждой записи. Если x> y, z = "ok", ЕСЛИ x

  x y 
a 1 2
b 2 3
c 5 1

результат

  x y z
a 1 2 tw
b 2 3 tw
c 5 1 ok

Ответы [ 3 ]

4 голосов
/ 20 января 2020

Может быть, вы можете попробовать ifelse(), как показано ниже

df <- within(df,z <- ifelse(x>y,"ok","tw"))

Если вы не определили выход для случая "x == y", возможно, вам следует добавить следующую строку

df$z[df$x==df$y] <- NA
3 голосов
/ 20 января 2020

в качестве альтернативы вы можете сделать это непосредственно на кадре данных:

# creation of dataframe
df = data.frame("x" = c(1, 2, 5), "y" = c(2, 3, 1))

# column creation of z
df$z[(df$x > df$y)] <- "ok"
df$z[(df$x < df$y)] <- "tw"
1 голос
/ 20 января 2020

Мы можем сделать это напрямую:

df$z <- c("tw", "ok")[(df$x > df$y) + 1]
df
#  x y  z
#a 1 2 tw
#b 2 3 tw
#c 5 1 ok

Не совсем понятно, что вы хотите сделать, когда x == y (выше присваивается «ОК»).


Мы также можем использовать case_when из dplyr для назначения значений на основе различных условий.

library(dplyr)
df %>%
  mutate(z = case_when(x > y ~"ok", 
                       x < y ~"tw", 
                       TRUE ~ NA_character_))

данные

df <- structure(list(x = c(1L, 2L, 5L), y = c(2L, 3L, 1L), z = c("tw", 
"tw", "ok")), row.names = c("a", "b", "c"), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...