2

我想用另一个因素(不是关卡的一部分)替换 data.frame 中的各种因素。例如:

au1 <- c('deb', 'art', 'deb', 'seb', 'deb', 'deb', 'mar', 'mar', 'joy', 'deb')
au2 <- c('art', 'deb', 'soy', 'deb', 'joy', 'ani', 'deb', 'deb', 'nem', 'mar')
au3 <- c('mar', 'lio', 'mil', 'mar', 'ani', 'lul', 'nem', 'art', 'deb', 'tat')

tata <- data.frame(au1, au2, au3)

我想用“XXX”改变所有的“deb”和“joy”。

找不到办法做到这一点。我很难为整个 data.frame 添加一个级别,并为 data.frame 使用 %in% c('', '') 。

任何想法?

4

3 回答 3

5

您可以使用mapvalues()library中的函数plyr()。由于您想对多列执行此操作,因此您也可以使用 function sapply()。如果数据框中的所有列都是因子,则此解决方案有效。

library(plyr)
xx<-as.data.frame(sapply(tata,
          mapvalues, from = c("deb", "joy"), to = c("XXX", "XXX")))
于 2013-08-12T09:20:44.497 回答
2

data.frame 是一个列表。您不能简单地更改整个列表的级别,您需要遍历列表内容:

as.data.frame(
  lapply(tata, function(x) {
    levels(x)[levels(x) %in% c("deb", "joy")] <- "XXX"
    x
  }))
于 2013-08-12T09:23:34.227 回答
0

这是使用NAerqdap 包中的函数的方法:

library(qdap)

tata[apply(tata, 2,  '%in%', c('deb', 'joy'))] <- NA
NAer(tata, "XXX")

##    au1 au2 au3
## 1  XXX art mar
## 2  art XXX lio
## 3  XXX soy mil
## 4  seb XXX mar
## 5  XXX XXX ani
## 6  XXX ani lul
## 7  mar XXX nem
## 8  mar XXX art
## 9  XXX nem XXX
## 10 XXX mar tat
于 2013-08-12T13:37:41.563 回答