在没有for循环的情况下更新R中的数据帧
我有一个主数据帧在没有for循环的情况下更新R中的数据帧,r,dataframe,match,apply,R,Dataframe,Match,Apply,我有一个主数据帧df: df <- data.frame(c("A", "B", "C"), c(1,2,3), c(3,1,2), c(4,2,1), rep(NA, 3), rep(NA, 3)) colnames(df) <- c("text", "var1", "var2", "var3", "value1", "value2") 我想匹配列“var1”、“var2”、“var3”,并更新列“value1”和“value2”。因此df.upd的第1行和第2行将df的第1行和
df
:
df <- data.frame(c("A", "B", "C"), c(1,2,3), c(3,1,2), c(4,2,1), rep(NA, 3), rep(NA, 3))
colnames(df) <- c("text", "var1", "var2", "var3", "value1", "value2")
我想匹配列“var1”、“var2”、“var3”,并更新列“value1”和“value2”。因此df.upd
的第1行和第2行将df
的第1行和第2行更新为.numeric(df.upd[row x,1:3])==as.numeric(df[row y,2:4])必须是TRUE
主df大约有30k行和60列,因此for循环不是一个选项。你知道如何更快地完成吗 这是一个for循环答案,但它仍然可能有用且快速,因为过程是矢量化的
ind <- intersect(names(df), names(df.upd))
for (i in ind) {
df[1:length(df.upd[,i]),i] <- df.upd[,i]
}
ind您可以使用merge
和all.x=TRUE
(左连接),然后使用ifelse
和is.na
更新相关列,然后删除额外列check out。。。i、 e.库(数据表);科尔斯
ind <- intersect(names(df), names(df.upd))
for (i in ind) {
df[1:length(df.upd[,i]),i] <- df.upd[,i]
}