Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 对于每一行,将特定列(由另一个数据帧定义)中的值替换为向量中的值_R_Dataframe_Replace - Fatal编程技术网

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
from
base 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))