Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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_Loops_Merge_Replace - Fatal编程技术网

R 如果在另一个数据帧中标记,则替换数据帧中的值

R 如果在另一个数据帧中标记,则替换数据帧中的值,r,loops,merge,replace,R,Loops,Merge,Replace,我在一个叫做“值”的数据框中有一些值 即: 和一些质量控制标志在单独的数据框“标志”中 Sam$F Ned$F Ted$F Ann$F 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 如果flags中的等效条目为1,即导致以下情况,我想将“values”中的数字替换为NA Sam Ned Ted Ann NA NA NA 212 410 265 NA 341 189 554 NA

我在一个叫做“值”的数据框中有一些值

即:

和一些质量控制标志在单独的数据框“标志”中

Sam$F   Ned$F   Ted$F   Ann$F
1   1   1   0 
0   0   1   0
0   0   1   0
0   0   0   0
0   0   1   0
如果flags中的等效条目为1,即导致以下情况,我想将“values”中的数字替换为NA

Sam Ned Ted Ann
NA  NA  NA  212
410 265 NA  341
189 554 NA  457
236 311 590 271
50  568 NA  442
F2 <-Flags
F2[F2 == "1"] <- "NA"
# Create identical column names for values and F2 for matching
samples <-colnames(Rvalues)
colnames(F2) <-samples
#Create an ID column for F2 and values
F2$ID <- c(1,2,3,4,5)
Rvalues$ID <- c(1,2,3,4,5)
out2 <- merge(Rvalues, F2, by = c("ID"), all.x = TRUE)
这个问题与这个问题非常相似:

这已经用“合并表”解决方案巧妙地解决了

除此之外,我有很多数据列要执行此操作,而不仅仅是一列。然而,我应该能够得到同样的“合并表”解决方案来为我工作

为了合并2个表(并用NA替换1),我使用了以下方法

Sam Ned Ted Ann
NA  NA  NA  212
410 265 NA  341
189 554 NA  457
236 311 590 271
50  568 NA  442
F2 <-Flags
F2[F2 == "1"] <- "NA"
# Create identical column names for values and F2 for matching
samples <-colnames(Rvalues)
colnames(F2) <-samples
#Create an ID column for F2 and values
F2$ID <- c(1,2,3,4,5)
Rvalues$ID <- c(1,2,3,4,5)
out2 <- merge(Rvalues, F2, by = c("ID"), all.x = TRUE)
因此,我想使用上面链接中发布的解决方案(由Chase发布),在一个循环中遍历每个示例的列

我尝试了以下方法:

for [i in samples]
{
out3 <- transform(out2, [i]$new = ifelse(is.na([i].x), [i].y, [i].x), [i].x = NULL, [i].y = NULL)}
样本中[i]的

{

out3如果您的“值”和“标志”数据。帧具有相同的维度和列顺序

values[flags == 1] <- NA

values[flags==1]如果您的“values”和“flags”data.frames具有相同的维度和列顺序

values[flags == 1] <- NA

values[flags==1]哇,太简单了,太明显了,是的,它们的维度和顺序都相同。谢谢。这使得循环完全没有必要。例如,如果列顺序不同,你知道循环是否结束了吗?如果列的顺序在data.frames中不同,那么你可以1)对列进行排序以获得两个数据中相同的顺序。框架或2)使用一些
apply
family函数。对于R中的循环,通常非常慢,最好避免使用。哇,这是如此简单和明显,是的,它们的维度和顺序相同。谢谢。这使得循环完全不必要。例如,如果c列顺序不同,您知道循环是否闭合吗?如果data.frames中的列顺序不同,则您可以1)对列进行排序以获得两个data.frames中相同的顺序,或者2)使用一些
apply
系列函数。对于R中的循环,通常速度非常慢,最好避免使用它们。