Замените значения в выбранных столбцах, передав имя столбца data.frame в функцию apply () или plyr. - PullRequest
2 голосов
/ 03 ноября 2011

Предположим, у меня есть date.frame вроде:

df <- data.frame(a=1:5, b=sample(1:5, 5, replace=TRUE), c=5:1)
df
  a b c
1 1 4 5
2 2 3 4
3 3 5 3
4 4 2 2
5 5 1 1

, и мне нужно заменить все 5 на NA в столбце b & c, а затем вернуться к df:

df
  a b  c
1 1 4  NA
2 2 3  4
3 3 NA 3
4 4 2  2
5 5 1  1

Но я хочу сделать общую функцию apply() вместо использования replace() для каждой из них, потому что в реальных данных нужно заменить много переменных.Предположим, я определил список переменных:

var <- c("b", "c")

и получил что-то вроде:

df <- within(df, sapply(var, function(x) x <- replace(x, x==5, NA)))

, но ничего не происходит.Я подумал, есть ли способ решить эту проблему с помощью чего-то похожего на вышеописанное, передав переменный список имен столбцов из data.frame в общую функцию apply / plyr (или, возможно, другими совершенно другими способами).Благодаря ~

Ответы [ 2 ]

7 голосов
/ 03 ноября 2011
df <- data.frame(a=1:5, b=sample(1:5, 5, replace=TRUE), c=5:1)
df
var <- c("b","c")
df[,var] <- sapply(df[,var],function(x) ifelse(x==5,NA,x))
df

Мне кажется, что нотацию ifelse легче понять, но большинство Rers, вероятно, вместо этого будут использовать индексацию.

6 голосов
/ 05 ноября 2011

Вы могли бы просто сделать

df[,var][df[,var] == 5] <- NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...