首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中比较其他数据帧和在for循环中选择行

问在R中比较其他数据帧和在for循环中选择行
EN

Stack Overflow用户
提问于 2022-01-01 18:13:54
回答 1查看 43关注 0票数 1

我的算法中有一些复杂的条件,我无法处理它们。我需要帮助。

我有4个数据帧,包括索引号和输出,如

u1 = data.frame(index = c(1,3,12,21,24),output =c(1,0,1,0,1), u2 = data.frame(index = c(2,5,16,1),output =c(0,1,1,0)` , u3 = data.frame(index = c(1,5,7,16),output =c(0,1,0,0) , u4 = data.frame(index = c(21,24,8),output =c(0,0,1)。

我尝试在R中编写一个for(i in 1:4)循环(如果您可以解决没有for循环的问题,我们欢迎您)。在每个步骤中,ith循环将检查其他数据帧索引号(例如,在步骤i=1中,检查u2、u3、u4),如果任何索引号在其他数据帧中至少重复2次,我将接受它。之后,我将检查这些相同索引的输出。如果这些索引的输出相同,我将选择这个索引号。让我给出上面i=1的数据帧的一个例子;检查u2、u3和u4的索引。索引5重复2次(输出相同,1),我选择它,索引1重复2次,输出相同,我将选择它和16重复2次,但输出是不同的,这就是为什么我不选择它。

I =2;检查u1、u3和u4的索引。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-01-01 18:32:30

也许这有帮助-得到'u1','u2',.对象在list ('lst1')中循环,然后在list的names上循环,在没有循环名称(setdiff)的情况下子集list,然后获取table,根据‘1’的频率计数创建逻辑向量,根据‘1’提取names,将命名的list转换为两列data.frame (stack)。

代码语言:javascript
复制
lst1 <- mget(ls(pattern = '^u\\d+$'))
stack(lapply(setNames(names(lst1), names(lst1)), 
    function(u) names(which(table(do.call(rbind, lst1[setdiff(names(lst1), 
    u)]))[,'1'] > 1))))[2:1]
   ind values
1  u1      5
2  u4      5

数据

代码语言:javascript
复制
u1 <- structure(list(index = c(1, 3, 12, 21, 24), output = c(1, 0, 
1, 0, 1)), class = "data.frame", row.names = c(NA, -5L))

u2 <- structure(list(index = c(2, 5, 16, 1), output = c(0, 1, 1, 0)), class = "data.frame", row.names = c(NA, 
-4L))

u3 <- structure(list(index = c(1, 5, 7, 16), output = c(0, 1, 0, 0)), class = "data.frame", row.names = c(NA, 
-4L))

u4 <- structure(list(index = c(21, 24, 8), output = c(0, 0, 1)), class = "data.frame", row.names = c(NA, 
-3L))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70550865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档