![](/img/trans.png)
[英]How to apply the result of a function to factors of a data.frame (R)?
[英]how to replace multiple factors in whole data.frame in R
我想用另一个因素(不是级别的一部分)替换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('','')。
任何想法?
你可以使用函数mapvalues()
从库plyr()
如果你想用多列做这个,那么你也可以使用sapply()
函数。 如果数据框中的所有列都是因子,则此解决方案有效。
library(plyr)
xx<-as.data.frame(sapply(tata,
mapvalues, from = c("deb", "joy"), to = c("XXX", "XXX")))
data.frame是一个列表。 您不能简单地更改整个列表的级别,需要遍历列表内容:
as.data.frame(
lapply(tata, function(x) {
levels(x)[levels(x) %in% c("deb", "joy")] <- "XXX"
x
}))
这是使用qdap包中的NAer
函数的方法:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.