R中的'which'函数返回row = 1而匹配值是否在第2行?

时间:2017-12-24 14:13:29

标签: r dataframe pattern-matching which

我有一个翻译表,我正在使用do.call(paste, input) %in% do.call(paste, big_translation_table)

返回TRUEFALSE

然后我使用which函数来查找索引,但它总是返回1

请告知。

这是一个小例子:

test1 <- data.frame(a = 1, b=2, c = "r", stringsAsFactors = FALSE)
test2 <- data.frame(a = c(1,2), b=c(2,10), c = c("r","p"), stringsAsFactors = FALSE)

which(do.call(paste, test1) %in% do.call(paste, test2))

返回1并且没关系,现在让我们测试:

test1 <- data.frame(a = 2, b=10, c = "p", stringsAsFactors = FALSE)
which(do.call(paste, test1) %in% do.call(paste, test2))

也会返回1。 我认为它应该返回2。

请告知。

2 个答案:

答案 0 :(得分:3)

%in%只是test1test2出现(在这种情况下)==的逻辑测试,而不是根据具体情况而定。我想你只想要test1 <- data.frame(a = 1, b=2, c = "r", stringsAsFactors = FALSE) > which(do.call(paste, test1) == do.call(paste, test2)) [1] 1

test1 <- data.frame(a = 2, b=10, c = "p", stringsAsFactors = FALSE)
> which(do.call(paste, test1) == do.call(paste, test2))
[1] 2

然后:

void initializeRecyclerView(){
    RecyclerView recyclerView = findViewById(R.id.mainRecyclerView);
    recyclerView.setLayoutManager(new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false));
    recyclerView.setHasFixedSize(true);
    ArrayList list=new ArrayList<MainItem>();
    list.add(new MainItem("Coming soon", R.drawable.soon_transparent, Color.parseColor("#91677D")));
    list.add(new MainItem("Week's plan", R.drawable.schedule_transparent, Color.parseColor("#95A6C4")));
    list.add(new MainItem("My vault", R.drawable.vault_transparent, Color.parseColor("#CCD9E9")));
    list.add(new MainItem("My achievements", R.drawable.soon_transparent, Color.parseColor("#E65D6D")));
    list.add(new MainItem("Coming soon!", R.drawable.soon_transparent, Color.parseColor("#FC9D94")));
    list.add(new MainItem("Exit", R.drawable.x_transparent, Color.parseColor("#BDCCD3")));
    adapter = new MainRecyclerAdapter(this, list);
    recyclerView.setAdapter(adapter);
}

答案 1 :(得分:0)

OP要求在翻译表test2中找到所有列中匹配项的行号。他将所有专栏粘贴在一起,以便在test1中查找test2来创建自然键。

不是重复粘贴列,而是执行 join 更有效。 data.table包具有which参数,该参数返回行号:

library(data.table)
setDT(test2)[setDT(test1), on = names(test1), which = TRUE]
[1] 2

第二个测试用例。

如果有必要明确要在连接中使用的列,我们可以写

setDT(test2)[setDT(test1), on = .(a, b, c), which = TRUE]