根据DF

时间:2017-12-19 12:28:10

标签: r dataframe replace row

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

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

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

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

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

1 个答案:

答案 0 :(得分: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