Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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 基于具有不匹配行的另一个DF中的值更改一个DF中的值_R_Functional Programming - Fatal编程技术网

R 基于具有不匹配行的另一个DF中的值更改一个DF中的值

R 基于具有不匹配行的另一个DF中的值更改一个DF中的值,r,functional-programming,R,Functional Programming,下面,我将尽我所能描述我正在尝试做的事情,然后包括我的最佳尝试MWE(包括2个csv文件) 问题:我有两个DFs。第一,称之为mweLookUps有列pLU,vMax,比如说10行。另一种,称之为mweData有p、v和vPrime,等列,比如说有100行 我想更改mweData的每一行中的值,这样,如果v的值高于mweLookUps中的vMax,其中pLU与mweData中给定行的p的值相同,则替换为vMax的值。 解决方案MWE mweData <- data.frame(p = c(

下面,我将尽我所能描述我正在尝试做的事情,然后包括我的最佳尝试MWE(包括2个csv文件)

问题:我有两个DFs。第一,称之为
mweLookUps
有列
pLU
vMax
,比如说10行。另一种,称之为
mweData
p
v
vPrime,
等列,比如说有100行

我想更改
mweData
的每一行中的值,这样,如果
v
的值高于
mweLookUps
中的
vMax
,其中
pLU
mweData
中给定行的
p
的值相同,则替换为
vMax的值。

解决方案MWE

mweData <- data.frame(p = c(rep(c(34:36), 5), rep(50:53, 5)), v = runif(35, 1000, 20000))
mweData$vPrime <- mweData$v
mweLookUps <- data.frame(p = c(34:36, 50:53), vMax = runif(7, 1600, 12000))
foo <- merge(mweData, mweLookUps, by = 'p')
foo$vPrime <- ifelse(foo$v > foo$vMax, foo$vMax, foo$v)

mweData我不确定我是否正确理解您的需求,但如果我理解,我会这样做

# merge on column p
foo <- merge(mweData, mweLookUps, by = "p") 
#for each row, if v > vMax, put vMax into vPrime, else put v into vPrime
foo$vPrime <- ifelse(foo$v > foo$vMax, foo$vMax, foo$v) 
#在p列上合并
foo vMax,将vMax放入vPrime,否则将v放入vPrime
foo$vPrime foo$vMax,foo$vMax,foo$v)

我不确定我是否正确理解您的需求,但如果我理解,我会这样做

# merge on column p
foo <- merge(mweData, mweLookUps, by = "p") 
#for each row, if v > vMax, put vMax into vPrime, else put v into vPrime
foo$vPrime <- ifelse(foo$v > foo$vMax, foo$vMax, foo$v) 
#在p列上合并
foo vMax,将vMax放入vPrime,否则将v放入vPrime
foo$vPrime foo$vMax,foo$vMax,foo$v)

这也可以在
合并后使用
pmin
完成。使用
dplyr
join

library(dplyr)
left_join(mweData, mweLookUps, by = "p") %>% 
                       mutate(v = pmin(vMax, v))

这也可以在
merge
ing之后使用
pmin
完成。使用
dplyr
join

library(dplyr)
left_join(mweData, mweLookUps, by = "p") %>% 
                       mutate(v = pmin(vMax, v))

谢谢你的反馈。我试图通过使用生成csv文件的命令替换csv文件来进一步提高运行的易用性。我还尝试更新代码中的命名约定,以匹配我在描述中的命名约定。感谢您的反馈。我试图通过使用生成csv文件的命令替换csv文件来进一步提高运行的易用性。我还尝试更新代码中的命名约定,使之与我在描述中的命名约定相匹配。这几乎就是它,非常感谢:D我将清理这两个问题,并将其添加到我的问题中。主要的想法是,对于merge,它必须是by=“p”,而不是by=p。。。另一件事是,我希望ifelse的结果是foo$vPrime而不是foo$vindect,很抱歉输入错误。编辑了你需要的答案。这几乎就是它,非常感谢:D我将清理这两个问题,并将其添加到我的问题中。主要的想法是,对于merge,它必须是by=“p”,而不是by=p。。。另一件事是,我希望ifelse的结果是foo$vPrime而不是foo$vindect,很抱歉输入错误。编辑了您需要的答案。