2015-10-05 37 views
0

我試圖做類似下面的操縱另一個列表:檢查,如果我在數據幀元素作爲R

x<-c(1:10) 
df<-data.frame(x) 
df['y']<-NA 
intersections<-c(3,6,9) 
values<-c('hello','hi','bye') 
inset<-data.frame(intersections,values) 
df['y']<-ifelse(df['x'] %in% inset$intersections, inset$values,NA) 

,我想我的輸出看起來像:

df 
x, y 
1, NA 
2, NA 
3, 'hello' 
4, NA 
5, NA 
6, 'hi' 
7, NA 
8, NA 
9, 'bye' 

請指點?

感謝這麼多,而不是使用ifelse

回答

0

變化在你的代碼下面,它的工作原理

inset <- data.frame(intersections,values, stringsAsFactors = FALSE) 
df$y <- ifelse(df$x %in% inset$intersections, inset$values, NA) 
+0

我喜歡你的解決方案的優雅,你能解釋一下stringsAsFactors的用途嗎?謝謝 – Henry

+0

值將被設置爲一個因素,如果你只是創建數據幀插入。 ifelse然後會輸入1而不是文本值。通過將stringAsFactors設置爲FALSE,可以避免此問題。 – phiver

0

,試試這個:

merge(df, inset, all.x = TRUE, by.x = "x", by.y = "intersections") -> df$y 
+0

在現實中我的X是十萬10S行,Y只有少數(〜8) - 但這些值重複(和日期)。合併真的是解決這個問題的最簡單方法嗎? 謝謝 – Henry

+0

有很多方法可以解決這個問題 - 合併只是一個。計算時間在這裏不是問題 - 你的數據集還是比較小的。 – Chris

+0

我同意,計算時間在這裏並不重要。我會給它一個 - 它被日期(等)稍微混淆了。 – Henry