我习惯于C ++样式编码,并且在理解如何转换比较两个数据帧列的值并基于该数据帧创建新数据帧而不使用for循环时遇到问题。我的示例代码如下。
for(i in seq(1,nrow(DF1))){
for(j in seq(1,nrow(DF2))){
if(DF1$some_col1[i]==DF2$some_col1[j] && DF2$some_col2[i]!=all_df$some_col2[j]){
DF3[nrow(DF3)+1,]<- c(DF1$some_col1[i],DF1$some_col2[i],DF2$some_colm[j])
}
}
}
}
答案 0 :(得分:0)
我假设您的意思是要比较数据框(称为col1
的一列(让我们将其称为df
)和同一数据框(称为{ {1}})。
我认为您正在尝试对同一数据框的多个列上的多个条件进行测试,然后如果满足所有条件,则要将这些行中的值插入到新数据框中。
col2
现在,我们按照我想您想要的去做:
df = dataframe(col1 = c(1,2,3,8),
col2 = c(1,3,0,8),
col3 = c(TRUE,FALSE,TRUE,TRUE))
现在newDF = df[ df$col1 == df$col2 & df$col3) , ]
将成为您数据框的子集:
newDF
修改它不会更改原始的 col1 col2 col3
1 1 1 TRUE
4 8 8 TRUE
。
**一些说明: 在R中,如果不使用循环,则几乎不需要使用索引变量。原因是R向量支持向量运算,因此您不必指定遍历整个列来检查条件的索引,而是只指定条件/运算符和向量,R即可完成其余工作:
df