我有一个数据框
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
与df$col.1
search.df
更新为100
search.df <- c("b", "d")
事实上,我有{1}个1k +行,dataframe
有16个元素。我知道一些SQL,但我无法在R中找到简单的更新。
答案 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.对于大数据集应该很快,因为我们正在替换它们。
:=