2015-08-13 22 views
1

我有一個名爲'data'的表。它有n列。每列都有相同的結構。 (即,具有兩個值的字符向量「是」,「否」)。我想重新編碼這些列,其中'是'標籤將是1,'不'標籤將是0.我目前使用for循環做如下。使用lapply或其他函數有更快的方法嗎?在沒有for循環的情況下更改表的列中的數據結構

for (i in (1:n)){ 

data[data[,i]=='no',i]=0 
data[data[,i]=='yes',i]=1 

} 

回答

0

假設data是一個矩陣,那麼直截了當

ifelse(data=="yes", 1, 0) 

看起來有吸引力。如果有可能是別的在data不是「是」或「否」,則像

matrix(c(yes=1, no=0)[data], nrow(data)) 

會導致NA值出現在這些地方。

這兩種解決方案均利用R的傾向,即將操作同時應用於陣列的所有組件。第一個是本着這個問題所概述的嘗試的精神。第二個利用數組的聯合尋址:c(yes=1, no=0)創建一個數組來執行轉換,[data]通過[(提取)函數執行轉換。

如果data別的東西 - 如數據幀 - 這將是快速,輕鬆地將其轉換爲一個矩陣(as.matrix),應用這些快速,簡單的解決方案,然後將其轉換回(as.data.frame)。

0

apply()和gsub()是你的朋友。

# random data frame of yes and no 
m <- data.frame(matrix(sample(c("yes","no"), 100, replace = T), 10)) 

# gsub each value 
m <- apply(m, 2, function(y) gsub("yes","1",y)) 
m <- apply(m, 2, function(y) gsub("no","0",y)) 

# and assuming you want them as numeric and not character 
m <- apply(m, 2, as.numeric) 
相關問題