更新数据帧的子集

时间:2015-10-25 12:19:18

标签: r dataframe

我有一个数据框

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.2df$col.1

匹配时,我想将search.df更新为100
search.df <- c("b", "d")

事实上,我有{1}个1k +行,dataframe有16个元素。我知道一些SQL,但我无法在R中找到简单的更新。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我们也可以使用data.table。我们将'data.frame'转换为'data.table'(setDT(df)),将'key'列设置为'col.1',使用'search.df'对行进行子集,并赋值({{ 1}})'col.2'的相应值为100.对于大数据集应该很快,因为我们正在替换它们。

:=