2015-10-14 89 views
0

我使用interaction()函數來創建新變量並將「Study」編號(例如1,2,3)和「Subject」編號(例如1:20 )。當我寫我的數據幀爲CSV閱讀它在另一個腳本以下列方式這個變量的變化: 1.10轉換至1.1或1.1轉換到1.10和 2.10轉換到2.1或2.1的換算結果爲2.10R交互()在寫入和讀取csv文件後截斷

它還發生在我寫的這個簡單的代碼:

x <- c(1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2) 
y <- 1:15 

xy <- as.data.frame(cbind(x,y)) 
xy$xy <- interaction(x,y) 

xy 

write.csv(xy, "xy.csv") 
xy2 <- read.csv("xy.csv") 

xy2 

有沒有一種方法可以輕鬆地解決它?

謝謝!

回答

3

你可以列一個字符明確地閱讀,而不是令R猜測數據類型,因爲它看起來非常像一個十進制數

write.csv(xy, "xy.csv", row.names=FALSE) 
xy2 <- read.csv("xy.csv", colClasses=c("numeric","numeric","character")) 

你也可以更改用於互爲作用,使之分離看起來不像一個十進制數

xy$xy <- interaction(x,y, sep="-") 
write.csv(xy, "xy.csv", row.names=FALSE) 
read.csv("xy.csv") 
+0

您也可以考慮 'xy_df < - as.data.frame(cbind(X,Y)); tidyr :: unite(xy_df,xy,x,y,remove = FALSE)'。 'tidyr :: unite'會產生一個字符,而'interaction'會默認創建一個因子。 – Peter

+1

@Peter當使用'write.csv'時,無論是字符還是因素都無關緊要。他們都寫了相同的。問題是,當你使用read.csv讀取數據時,R會根據觀測值嘗試猜測數據類型。 – MrFlick

+0

好點。我想我以前的評論應該是'tidyr :: unite'的默認分隔符是「_」,而'interaction'的默認值是「。」。 – Peter