我有一个数据框,如果同一行中的其他值满足特定条件,则可以替换某些值,例如:
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循环,但由于我有一个庞大的数据集,这需要花费太多时间。有没有更好的方法来解决这个问题?
答案 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