Заменить значения одного столбца - PullRequest
7 голосов
/ 24 марта 2011

Как заменить значения из одного столбца кадра данных. Например, все 0 значений в столбце dataz до значений 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 ]

8 голосов
/ 24 марта 2011

Это изменит значения от 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. Используйте назначить (<-), чтобы присвоить ваше значение.

df$datay[df$datay < 3 & df$datay > 1]

Вот краткий пример ifelse.

ifelse(df$dataz == "w", "oi!", NA)
6 голосов
/ 24 марта 2011

Загрузите ваши данные с помощью (чтобы другие легко могли это сделать для вашего воспроизводимого примера):

> 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,]"))

Чтобы изменить "все 0 значений в столбце dataz на значения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...