根据DF中的其他值替换

问题描述 投票:0回答:1

我有一个数据框,如果同一行中的其他值满足特定条件,则更换某些值,例如:

DF <- data.frame(a= c(2,4,67),
                 b= c("TSS",".","TSS"),
                 c= c(3,46,5),
                 d= c(45,"-",47))

导致:

   a   b  c  d
1  2 TSS  3 45
2  4   . 46  - 
3 67 TSS  5 47

现在我想用第二行c和d替换值“。”如果[2,b]的值是“。”,则分别为[2,c]。结果如下所示:

   a   b  c  d
1  2 TSS  3 45
2  4   .  . 46   
3 67 TSS  5 47

我尝试使用for循环,但由于我有一个庞大的数据集,这需要花费太多时间。有没有更好的方法来解决这个问题?

r dataframe replace row
1个回答
1
投票

这应该工作:

DF <- data.frame(
  a = c(2, 4, 67),
  b = c("TSS", ".", "TSS"),
  c = c(3, 46, 5),
  d = c(45, "-", 47),
  stringsAsFactors = FALSE
)


DF$d[DF$b == "."] <- DF$c[DF$b == "."]
DF$c[DF$b == "."] <- "."

首先,我们替换行中的d值,其中b是“。”来自c的值。然后第二行用“。”替换c中的值。

> DF
   a   b c  d
1  2 TSS 3 45
2  4   . . 46
3 67 TSS 5 47
© www.soinside.com 2019 - 2024. All rights reserved.