12

我试图找到一种方法将两列因素组合成一列而不将因素水平更改为数字。例如,考虑以下两个 data.frame 数据集

  dataset 1                       dataset 2
  Number  Student                 Number Student
       1    Chris                      1    Matt
       2    Sarah                      2   Keith

我正在尝试从 dataset1 中获取“student”列,从 dataset2 中获取“student”列,并制作一个包含名称“Chris”、“Sarah”、“Matt”和“Keith”的大学生列

我试过:

  student.list<-c(dataset1[,2],dataset2[,2])
  student.list

但是,这不起作用,因为名称会使用 c() 函数变成数字。我希望我的列表保留学生的姓名(即不将它们转换为数字)。我也尝试了 cbind(),但给出了与 c() 相同的问题...

谢谢

4

5 回答 5

12

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)
于 2013-10-05T19:26:01.887 回答
3

基本 R 包中有interaction()功能。包里也有strata()功能。survival

于 2018-06-21T11:25:20.753 回答
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
于 2013-10-05T20:52:50.967 回答
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
于 2016-10-12T14:11:33.967 回答
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
于 2013-10-05T21:27:17.653 回答