изменить значение в каждой строке кадра данных - PullRequest
0 голосов
/ 04 января 2019

У меня есть вход с именем target и датафрейм:

target <- 3
d <- data.frame(x=c(1,2,3),y=c(4,5,6))

x y  
1 4   
2 5   
3 6

Я хочу для каждой строки:

если значение столбца x

если значение столбца y> target, тогда это значение <- 9 </p>

результат:

x y   
0 9
0 9
3 9

как я могу получить это?

Я пытался использовать функцию apply, но она не позволяла изменить значение в кадре данных d.

Ответы [ 3 ]

0 голосов
/ 04 января 2019

С dplyr и case_when:

library(dplyr)
d <- d %<% 
mutate(target = 3,
       x = case_when(x < target ~ 0,
                     T ~ x),
       y = case_when(y > target ~ 9,
                     T ~ y))

С базой r:

d$x[d$x < target,] <- 0
d$y[d$y > target,] <- 9
0 голосов
/ 05 января 2019

Простой способ только с использованием базы R.

# Add object.
target <- 3

# Create dataframe.
df1 <- data.frame(x = c(1, 2, 3),y=c(4, 5, 6))

# Copy dataframe [df1] to new dataframe [ðf2].
# Preserve old dataframe [df1] for comparison.
df2 <- df1

# Insert digits.
df2$x[df2$x < target] <- 0
df2$y[df2$y > target] <- 9
0 голосов
/ 04 января 2019

Несколько способов сделать это. В одну сторону, используя двойной replace

replace(replace(d, d > target, 9), d < target, 0)

#  x y
#1 0 9
#2 0 9
#3 3 9

Эта логика также может использоваться в dplyr цепочке

library(dplyr)
d %>% mutate_all(funs(replace(replace(., . > target, 9), . < target, 0)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...