我的算法中有一些复杂的条件,我无法处理它们。我需要帮助。
我有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的索引。
谢谢。
发布于 2022-01-01 18:32:30
也许这有帮助-得到'u1','u2',.对象在list ('lst1')中循环,然后在list的names上循环,在没有循环名称(setdiff)的情况下子集list,然后获取table,根据‘1’的频率计数创建逻辑向量,根据‘1’提取names,将命名的list转换为两列data.frame (stack)。
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数据
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))https://stackoverflow.com/questions/70550865
复制相似问题