R 将向量中的分类值替换为数字
我有一个数据框R 将向量中的分类值替换为数字,r,R,我有一个数据框 t = data.frame(c(5,5,5), c('a','b','c', 'a', 'b', 'd'), c(1,2,3), c(1,2,3)) 和带有行名的向量 vector = table(t$V2) 如何用向量中的数字替换数据帧中的第二个分类列 我做了一些google foo,并尝试做以下工作: map = setNames(vector, rownames(vector)) to_replace = t$V2 to_replace[] = map[unlist(
t = data.frame(c(5,5,5), c('a','b','c', 'a', 'b', 'd'), c(1,2,3), c(1,2,3))
和带有行名的向量
vector = table(t$V2)
如何用向量中的数字替换数据帧中的第二个分类列
我做了一些google foo,并尝试做以下工作:
map = setNames(vector, rownames(vector))
to_replace = t$V2
to_replace[] = map[unlist(map)]
但我得到了一个错误:
Warning message:
In `[<-.factor`(`*tmp*`, , value = c(146L, 146L, 27L, 82L, 110L, :
invalid factor level, NA generated
警告消息:
在“[中,当我试图执行rownames(vector)=c('a','b','c')
时,我遇到了一个错误。rownames这就是你要做的吗
t = data.frame(v1 = c(5,5,5), v2 = c('a','b','c'), v3 = c(1,2,3), v4 = c(1,2,3))
vector = c(2,4,6)
row.names(t) <- vector
print(t)
# Output from print(t)
v1 v2 v3 v4
2 5 a 1 1
4 5 b 2 2
6 5 c 3 3
t=data.frame(v1=c(5,5,5),v2=c('a','b','c'),v3=c(1,2,3),v4=c(1,2,3))
向量=c(2,4,6)
row.names(t)您的问题是数据帧中interstat的列是typefactor
。请检查以下代码,有无散列行
t <- data.frame(c(5,5,5), c('a','b','c'), c(1,2,3), c(1,2,3))
vector <- c(2,4,6,8)
names(vector) <- c('a', 'b', 'c', 'd')
# t[,2] <- as.character(t[,2])
for(i in 1:dim(t)[1]){
t[i,2] <- vector[which(names(vector)==t[i,2])]
}
t你大概是说第3行的names(vector)
(不是rownames(vector)
)我不确定,但我已经编辑了我的帖子以使它更清楚。rownames(vector)
对我和@42都产生了一个错误(见下文)。如果我使用表()从数据帧生成vector,rownames对我有效是的,因为vector
不是作为向量存储的——因此与post的原始版本的行为不同:)
t$V2 <- vector
t = data.frame(v1 = c(5,5,5), v2 = c('a','b','c'), v3 = c(1,2,3), v4 = c(1,2,3))
vector = c(2,4,6)
row.names(t) <- vector
print(t)
# Output from print(t)
v1 v2 v3 v4
2 5 a 1 1
4 5 b 2 2
6 5 c 3 3
t <- data.frame(c(5,5,5), c('a','b','c'), c(1,2,3), c(1,2,3))
vector <- c(2,4,6,8)
names(vector) <- c('a', 'b', 'c', 'd')
# t[,2] <- as.character(t[,2])
for(i in 1:dim(t)[1]){
t[i,2] <- vector[which(names(vector)==t[i,2])]
}