2017-08-14 52 views
0

我想合并/绑定两个数据集(mydata_103和mydata_17)。他们具有完全相同的变量名,但我得到这些警告消息用不同的类绑定数据集

Warning messages: 
1: In `[<-.factor`(`*tmp*`, ri, value = c(1, 1, 2, 1, 1, 1, 1, 1, 5, : 
invalid factor level, NA generated 

这似乎是一个事实,即一些变量有不同类引起的4。例如,我有一个变量“性别”(1 =男性,2 =女性)。在合并的数据集中,我确实看到了mydata_17的值标签,但是对于其他数据集,我获得了NA。当我检查类,R返回它们是不同的(我不知道为什么是这样的话,虽然?)

> lapply(mydata_103[7], class) 
$prgesl 
[1] "numeric" 

> lapply(mydata_17[7], class) 
$prgesl 
[1] "factor" 

我改变的mydata_103的类因素

mydata_103$prgesl <- as.factor(mydata_103$prgesl) 

现在,我获取数值,但它仍然不会转换为值标签:

prgesl 
15  Man 
16  Man 
17 Vrouw 
18  2 
19  2 
20  1 
21  2 

有没有人知道如何解决这个问题?有没有办法让我的两个数据集的类相同或检查哪些不同? (我有404个变量,因此通过视觉检查来检查这个变量似乎是无效的,并且容易出错)。

最佳,Hanneke

编辑:现在合并我的数据集的代码很简单:

data1 <- rbind.data.frame(mydata_17, mydata_103) 
+1

我会改变到第一数字在两个和'rbind()'回因子之后。 – mtoto

+0

好的,但是我只留下数字值,但值标签更易于解读 - 是否有办法保留值标签? – HannekeLettinga

+0

将因子列转换为字符,然后rbind,请参阅[此处](https://stackoverflow.com/a/2853231/680068)以仅转换因子列。 – zx8754

回答

1

继要先将所有的都以数字mtoto的建议,然后使用levels()功能开启数字转化为标签。

mydata_17$prgesl <- as.numeric(mydata_17$prgesl) 
mydata<- rbind(mydata_17,mydata_103) 
labels <- levels(mydata_103$prgesl) 
mydata_103$prgesl <-labels[mydata_103$prgesl] 

levels()应该返回因素的名字尊重由数字给定的顺序。

1

转换因子列于字符然后rbind,例如:

# reproducible data 
set.seed(1) 
df1 <- data.frame(x = 1:3, y = runif(3)) 
df2 <- data.frame(x = letters[2:4], y = runif(3)) 

# below rbind will introduce NAs 
rbind.data.frame(df2, df1) 
# x   y 
# 1 b 0.9082078 
# 2 c 0.2016819 
# 3 d 0.8983897 
# 4 <NA> 0.2655087 
# 5 <NA> 0.3721239 
# 6 <NA> 0.5728534 
# Warning message: 
# In `[<-.factor`(`*tmp*`, ri, value = 1:3) : 
# invalid factor level, NA generated 

# Convert factors to character 
i <- sapply(df1, is.factor) 
df1[i] <- lapply(df1[i], as.character) 
i <- sapply(df2, is.factor) 
df2[i] <- lapply(df2[i], as.character) 

# now bind 
res <- rbind.data.frame(df2, df1) 

str(res) 
# 'data.frame': 6 obs. of 2 variables: 
# $ x: chr "b" "c" "d" "1" ... 
# $ y: num 0.908 0.202 0.898 0.266 0.372 ... 

res 
# x   y 
# 1 b 0.9082078 
# 2 c 0.2016819 
# 3 d 0.8983897 
# 4 1 0.2655087 
# 5 2 0.3721239 
# 6 3 0.5728534 
相关问题