2015-10-25 23 views
1

我有一個數據幀作爲這樣更新一個數據幀的一個子集

col.1 <- c("a", "b", "c", "d", "e", "b", "c") 
col.2 <- c(22, 33, 55, 66, 66, 22, 54) 
df <- data.frame(col.1, col.2) 

和我想更新col.2至100當df$col.1匹配search.df

search.df <- c("b", "d") 

事實上,我有dataframe 1k +行,我的search.df有16個元素。我知道有些SQL和R.我無法找到一個簡單的更新

回答

1
df[df[,1] %in% search.df, 2] <- 100 

,或者如果你想利用這些數據幀直接

df$col.2[df$col.1 %in% search.df] <- 100 

爲了簡單起見,同一細分的列元素:

# get index of rows to be updated by checking each value 
# in col1 against search.df => e.g. FALSE, TRUE, FALSE, ... 
index <- df[,1] %in% search.df 

# update col2 where index is TRUE to a new value 
df[index, 2] <- 100 
0

我們也可以使用data.table。我們將'data.frame'轉換爲'data.table'(setDT(df)),將'key'列設置爲'col.1',使用'search.df'對行進行子集合分配(:=) 'col.2'到100.對於大數據集,我們正在替換原來的數據集應該很快。

library(data.table)#v1.9.6+ 
setDT(df, key='col.1')[search.df, col.2 := 100] 
df 
# col.1 col.2 
#1:  a 22 
#2:  b 100 
#3:  b 100 
#4:  c 55 
#5:  c 54 
#6:  d 100 
#7:  e 66 
相關問題