我试图找到一种方法将两列因子组合成一列而不将因子水平更改为数字。例如,考虑以下两个data.frame数据集
dataset 1 dataset 2
Number Student Number Student
1 Chris 1 Matt
2 Sarah 2 Keith
我正在尝试从数据集1中取出“学生”列,从数据集2中取出“学生”列,然后创建一个包含名称“Chris”,“Sarah”,“Matt”和“Keith”的大学生列
我试过了:
student.list<-c(dataset1[,2],dataset2[,2])
student.list
然而,这不起作用,因为名称变成带有c()函数的数字。我希望我的列表保留学生的姓名(即不将其转换为数字)。我也试过cbind(),但是给出了与c()...
相同的问题谢谢
答案 0 :(得分:10)
factors
是碰巧有标签的数字。组合因子时,通常会将它们的数值组合在一起。这经常会使一个人绊倒。
如果您需要标签,则必须使用as.character
student.list <- c( as.character(dataset1[,2]) ,
as.character(dataset2[,2]) )
如果您希望将其重新考虑到因素,请将其全部包含在as.factor
中(可以全部在一行中,也可以分成两行以便于阅读)
student.list <- c(as.character(dataset1[,2]),as.character(dataset2[,2]))
student.list <- as.factor(student.list)
答案 1 :(得分:2)
data.table
包以一些非常有用的方式扩展数据框的功能,在使用rbindlist
函数时会自动组合因子。另外,如果您的两个数据集很大,通常会更快地将它们组合起来。
library(data.table)
# Example data:
# (If you already have data frames, you can convert them using `as.data.table(dataframename)`)
dataset1<-data.table(Number=1:2,Student=as.factor(c("Chris","Sarah")))
dataset2<-data.table(Number=1:2,Student=as.factor(c("Matt","Keith")))
# Combine the two data sets:
# (It's not necessary to convert factors to characters)
rbindlist(list(dataset1,dataset2))
# Number Student
#1: 1 Chris
#2: 2 Sarah
#3: 1 Matt
#4: 2 Keith
答案 2 :(得分:2)
基本R程序包中有interaction()
函数。
strata()
包中还包含survival
函数。
答案 3 :(得分:1)
现在,您可以使用fct_c()
包中的forcats
轻松完成此操作。
dataset1 <- data.frame(Number = c(1,2), Student = factor(c('Chris','Sarah')))
dataset2 <- data.frame(Number = c(1,2), Student = factor(c('Matt','Keith')))
library(forcats)
fct_c(list(dataset1[ ,2], dataset2[ ,2]))
# [1] Chris Sarah Matt Keith
# Levels: Chris Sarah Keith Matt
答案 4 :(得分:0)
如果因子在数据框内,那么您可以使用rbind
:
> df1 <- data.frame(x=factor(c('a','b')))
> df2 <- data.frame(x=factor(c('c','d')))
> rbind(df1,df2)
x
1 a
2 b
3 c
4 d