修改数据框每一行中的值

时间:2019-01-04 13:31:25

标签: r

我有一个称为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列的值<目标,则该值<-0

如果y列的值>目标,则该值<-9

结果:

x y   
0 9
0 9
3 9

我怎么能得到这个?

我尝试使用函数apply,但不允许修改数据帧d中的值。

3 个答案:

答案 0 :(得分:1)

执行此操作的多种方法。一种使用双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)))

答案 1 :(得分:0)

使用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

答案 2 :(得分:0)

仅使用R base的直接方法。

# 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