2017-08-14 56 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 
相關問題