我有一个称为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
中的值。
答案 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