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中的循环,通常速度非常慢,最好避免使用它们。