R 对于每一行,将特定列(由另一个数据帧定义)中的值替换为向量中的值
假设我们有:R 对于每一行,将特定列(由另一个数据帧定义)中的值替换为向量中的值,r,dataframe,replace,R,Dataframe,Replace,假设我们有: set.seed(42) df1 <- data.frame(v1=rnorm(10) , v2=rnorm(10), v3=rnorm(10), v4=rnorm(10)) set.seed(42) df11) 我的做法是: idx <- df1 < .5 tmp <- idx * vector df2[idx] <- tmp[idx] 我们首先检查df1是=0.5)+(df1@MartinGal我认为你的方法很好。请作为答案发布。我只是使用了
set.seed(42)
df1 <- data.frame(v1=rnorm(10) , v2=rnorm(10), v3=rnorm(10), v4=rnorm(10))
set.seed(42)
df11)
我的做法是:
idx <- df1 < .5
tmp <- idx * vector
df2[idx] <- tmp[idx]
我们首先检查df1
是<.5
的位置,并将其乘以向量
得到该矩阵
idx <- df1 < .5
tmp <- (idx) * vector
tmp
# v1 v2 v3 v4
# [1,] 0 0 0 17
# [2,] 21 21 0 21
# [3,] 33 0 33 33
# [4,] 41 0 0 41
# [5,] 50 50 50 50
# [6,] 0 63 63 63
# [7,] 72 72 72 72
# [8,] 81 81 81 0
# [9,] 0 91 91 91
#[10,] 0 0 10 10
我们还可以使用Map
frombase R
data.frame(Map(function(x, y) ifelse(x < 0.5, vector, y) , df1, df2))
好主意!如果我没有弄错的话,这可以“简化”为df2*(df1>=0.5)+(df1@MartinGal我认为你的方法很好。请作为答案发布。我只是使用了你的方法,所以它基本上只是你答案的变体。:-)
df2
# v1 v2 v3 v4
#1 -1.4936251 5.676206e-01 -0.08610730 17.0000000
#2 21.0000000 2.100000e+01 -0.88767902 21.0000000
#3 33.0000000 6.288407e-05 33.00000000 33.0000000
#4 41.0000000 1.122890e+00 -0.02944488 41.0000000
#5 50.0000000 5.000000e+01 50.00000000 50.0000000
#6 -0.4282589 6.300000e+01 63.00000000 63.0000000
#7 72.0000000 7.200000e+01 72.00000000 72.0000000
#8 81.0000000 8.100000e+01 81.00000000 -0.8002822
#9 -1.2247480 9.100000e+01 91.00000000 91.0000000
#10 0.1795164 -5.246948e-02 10.00000000 10.0000000
idx <- df1 < .5
tmp <- (idx) * vector
tmp
# v1 v2 v3 v4
# [1,] 0 0 0 17
# [2,] 21 21 0 21
# [3,] 33 0 33 33
# [4,] 41 0 0 41
# [5,] 50 50 50 50
# [6,] 0 63 63 63
# [7,] 72 72 72 72
# [8,] 81 81 81 0
# [9,] 0 91 91 91
#[10,] 0 0 10 10
df2[idx] <- tmp[idx]
data.frame(Map(function(x, y) ifelse(x < 0.5, vector, y) , df1, df2))
library(purrr)
map2_df(df1, df2, ~ case_when(.x < 0.5 ~ vector, TRUE~ .y))