2014-04-15 121 views
0

这是我的问题。我有两个数据框,df1和df2。我想添加一个名为issp的列到df1中,作为df2中名为sp的列的值的函数。 df1和df2有一个共同名为loc的列,但它在df2中重复了很多(df2中的〜90k行,对df1中的5k行)。从一个数据帧传输信息到另一个

的想法是,以确定其DF1通过向列ISSP值1

这里包含的种类SP的位置是脚本使用:

for (i in (1:length(df2$loc)) { 
    if (df2[i, "sp"]==1) { 
     df1(which[df1$loc==df2[i, "loc"]],)$issp = 1 
    } 
} 

它不工作和R将我带回了以下错误:

Error in `*tmp*`[df1[, "loc"] == df2[i, "loc"]] : 
    object of type 'closure' is not subsettable` 
+0

你'DF1(这...)'是错误的。你使用了'('而不是'['。它必须是'df1 [which ...]'。 – sgibb

+0

确实...对不起,并且非常感谢。 – user3443183

回答

0

你有一个语法错误:

df1(which[df1$loc==df2[i, "loc"]],)$issp = 1 

应该

df1[which(df1$loc==df2[i, "loc"]),]$issp = 1 
+0

...确实,对于无用的问题抱歉。非常感谢你。 – user3443183

1

一个更好的办法来做到这一点

#Get indices of sp in df2 that are 1 
df2.sp.idx <-which(df2$sp ==1) 
df1$issp <-NA 
df1$issp[which(df1$loc %in% df2$loc[df2.sp.idx])] <-1