如何替换数据帧的单个列中的值。例如,列dataz中的所有0值均为1
的值 datay dataz
[1,] 0 100
[2,] 2 101
[3,] 3 102
[4,] 4 103
[5,] 10 0
[6,] 11 0
[7,] 0 0
[8,] 0 0
[9,] 0 0
[10,] 12 11
[11,] 45 12
答案 0 :(得分:8)
这会将值5更改为NA。您也可以使用范围。
df <- data.frame(datay = sample(1:5, 10, replace = TRUE), dataz = sample(letters, 10, replace = TRUE))
df$datay[df$datay == 5] <- NA
这将找到小于3且大于1的数据。使用assign(<-
)来指定您的值。
df$datay[df$datay < 3 & df$datay > 1]
以下是ifelse
的简短示例。
ifelse(df$dataz == "w", "oi!", NA)
答案 1 :(得分:6)
加载您的数据(其他人可以轻松地为您的可重现示例执行此操作):
> text <- textConnection(" datay dataz
+ [1,] 0 100
+ [2,] 2 101
+ [3,] 3 102
+ [4,] 4 103
+ [5,] 10 0
+ [6,] 11 0
+ [7,] 0 0
+ [8,] 0 0
+ [9,] 0 0
+ [10,] 12 11
+ [11,] 45 12")
> df <- read.table(text, header=TRUE)
或者使用应用于数据框的dput
输出:
> df <- structure(list(datay = c(0L, 2L, 3L, 4L, 10L, 11L, 0L, 0L, 0L,
12L, 45L), dataz = c(100L, 101L, 102L, 103L, 0L, 0L, 0L, 0L,
0L, 11L, 12L)), .Names = c("datay", "dataz"), class = "data.frame", row.names = c("[1,]",
"[2,]", "[3,]", "[4,]", "[5,]", "[6,]", "[7,]", "[8,]", "[9,]",
"[10,]", "[11,]"))
要将“列dataz中的所有0值”更改为值1“:
> df$dataz[df$dataz == 0] <- 1
> df
datay dataz
[1,] 0 100
[2,] 2 101
[3,] 3 102
[4,] 4 103
[5,] 10 1
[6,] 11 1
[7,] 0 1
[8,] 0 1
[9,] 0 1
[10,] 12 11
[11,] 45 12