替换单个列值

时间:2011-03-24 08:44:29

标签: r

如何替换数据帧的单个列中的值。例如,列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

2 个答案:

答案 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