2016-04-05 48 views
0

'daki veri çerçevesindeki değerler ile değiştirin. Veri çerçevesinin (df1) sütunundaki değerleri (df1 $ y) koşullu olarak başka bir veri çerçevesinden (df2 $ y) değerlerle değiştirmek istiyorum. Bu veri karelerinin bir ortak kimlik sütunu (x) vardır. df1, df2'den daha fazla satıra sahiptir ve df2'de olmayan değerlere sahiptir.Veri çerçevesindeki değerleri R

durumdur:

> df1 <- data.frame(x = c(1, 1, 2, 3, 4, 4, 4, 5, 6, 7), 
        y = c(100, 100, 50, 50, 75, 75, 75, 50, 100, 25)) 
> df1 
    x y 
1 1 100 
2 1 100 
3 2 50 
4 3 50 
5 4 75 
6 4 75 
7 4 75 
8 5 50 
9 6 100 
10 7 25 

> df2 <- data.frame(x = c(2, 4, 6, 7), y = c(25, 100, 75, 100)) 
> df2 
    x y 
1 2 25 
2 4 100 
3 6 75 
4 7 100 

istenen çıkışı: eşleşme

Ex şey

orada do ise df1 $ x == df2 $ x, df2 $ y ile df1 $ y değiştirirseniz :

df1 
x y 
1 100 
1 25 
2 50 
3 50 
4 100 
4 100 
4 100 
5 50 
6 75 
7 100 

Burada yayınlanan ilk sorum bu ve başka bir soruda yanıtlandıysa lütfen bana bildirin.

Bu soru, Transfer values from one dataframe to another'dan farklıdır, çünkü koşullu olarak df1 $ y değerlerini nasıl değiştirdiğimi soruyorum, ancak değerleri df1.x! = Df2.x olarak saklayın. Soruya bağlı olarak, duruma uymayan değerler NA değerleridir. Yukarıdaki bağlantıya verilen bir cevaba göre sqldf() yöntemini kullanarak bir örnek için aşağıya bakın.

> sqldf('SELECT df1.x , df2.y 
+  FROM df1 
+  LEFT JOIN df2 
+  ON df2.x = df1.x') 
    x y 
1 1 NA 
2 1 NA 
3 2 25 
4 3 NA 
5 4 100 
6 4 100 
7 4 100 
8 5 NA 
9 6 75 
10 7 100 
+2

şartlar nelerdir? x değeri eşleşmediğinde df1'deki ikinci satır y-değerini df2'nin ilk satır değeri ile neden değiştirirsiniz? – rawr

+0

Bunu açıklığa kavuşturmalıydım. Durum: eğer df1 $ x == df2 $ x ise, df1 $ y yerine df2 $ y ile değiştirin, eğer hiçbir eşleşme yok ise. Bu koşulu eklemek için ana gönderiyi düzenleyeceğim. –

cevap

2

Sen öncelikle iki veri çerçeveleri birleştirme ve ardından elemanlarını değiştirmek için dplyr paketini kullanabilirsiniz. library(dplyr) df1 <- merge(df1, df2, by = "x", all = T) %>% mutate(y = ifelse(is.na(y.y), y.x, y.y)) %>% select(x, y)

+0

Bu harika çalıştı! –

İlgili konular