楼主: 乌贼07
17347 4

[有偿编程] R语言如何返回待查找的数据所在行的行号? [推广有奖]

  • 0关注
  • 9粉丝

已卖:299份资源

硕士生

56%

还不是VIP/贵宾

-

威望
0
论坛币
14381 个
通用积分
51.8460
学术水平
16 点
热心指数
24 点
信用等级
11 点
经验
2855 点
帖子
105
精华
0
在线时间
190 小时
注册时间
2009-4-9
最后登录
2023-8-22

楼主
乌贼07 发表于 2017-6-9 22:36:23 |AI写论文
20论坛币
题目:R语言如何返回待查找的数据所在行的行号?

具体为:有2个变量e和e1,其中:
> e
      [,1] [,2]
[1,] "4"  "1"
[2,] "6"  "2"
[3,] "2"  "3"
[4,] "5"  "3"
[5,] "6"  "3"
[6,] "3"  "4"
[7,] "5"  "4"
[8,] "1"  "5"
[9,] "2"  "5"
[10,] "1"  "6"
[11,] "4"  "6"


> e1
     [,1] [,2]
[1,] "4"  "6"
[2,] "5"  "4"

现在我想在e中查找满足条件e1的值的行号。

上诉例子中,e1的第1行的记录("4","6")在e的第11行,

e1的第2行的记录("5","4")在e的第7行,

所以,我需要结果返回:
11
7

===============================

以上在R命令行里应该怎么写代码呢?通用点的。初次接触R语言,不太会。望多指教! 再次感谢!



最佳答案

jiangbeilu 查看完整内容

这个问题,楼上是一种很好的解决问题的思路,主要是将多个变量融合成1个变量了,我这里提供一种另用内置函数解决问题的方法。 因为你要找相同的,很明显可以利用duplicated在data.frame里查找重复记录来解决问题。 如果每次你都将e1里面需要查找的行,与e进行合并,那么就可以在一个data.frame里进行duplicated操作了。 使用此方法的前提是:你的e矩阵里面没有重复的行。 代码如下:
关键词:R语言 如何

沙发
jiangbeilu 学生认证  发表于 2017-6-9 22:36:24
这个问题,楼上是一种很好的解决问题的思路,主要是将多个变量融合成1个变量了,我这里提供一种另用内置函数解决问题的方法。
因为你要找相同的,很明显可以利用duplicated在data.frame里查找重复记录来解决问题。
如果每次你都将e1里面需要查找的行,与e进行合并,那么就可以在一个data.frame里进行duplicated操作了。
使用此方法的前提是:你的e矩阵里面没有重复的行。
代码如下:
  1. apply(e1,1,function(x) which(duplicated(rbind(x,e)))-1)
复制代码
已有 1 人评分学术水平 收起 理由
gongjiangchao + 1 精彩帖子

总评分: 学术水平 + 1   查看全部评分

藤椅
zhou1_20 发表于 2017-6-10 09:47:45
  1. e <- matrix(as.character(c(4,6,2,5,6,3,5,1,2,1,4,
  2.                          1,2,3,3,3,4,4,5,5,6,6)),
  3.             ncol = 2,nrow = 11)
  4. e1 <- matrix(as.character(c(4,5,6,4)),ncol = 2)

  5. fun=function(x)apply(x,1,function(x) paste0(x,collapse =' '))
  6. funm=function(m,m1){
  7.   re=unlist(lapply(fun(m1),function(x) which(x==fun(m))))
  8.   return(re)
  9. }
  10. funm(e,e1)
  11. #11  7
  12. #测试
  13. set.seed(1)
  14. t <- matrix(sample(20),ncol = 2)
  15. #设置8,2,5为相等行
  16. t1 <- matrix(c(9,8,4,17,2,5),ncol = 2)
  17. funm(t,t1)
  18. #8 2 5
复制代码

板凳
乌贼07 发表于 2017-6-12 21:20:10
jiangbeilu 发表于 2017-6-10 11:12
这个问题,楼上是一种很好的解决问题的思路,主要是将多个变量融合成1个变量了,我这里提供一种另用内置函数 ...
除了这个,还有别的什么好办法吗?

报纸
cheetahfly 在职认证  发表于 2017-6-12 22:18:32
jiangbeilu 发表于 2017-6-10 11:12
这个问题,楼上是一种很好的解决问题的思路,主要是将多个变量融合成1个变量了,我这里提供一种另用内置函数 ...
@jiangbeilu, @zhou1_20 两位思路开阔,咱们以代码会友,我也献丑一个解题角度——
以matrix的内容作为vector elements的名称,然后用`[`引用来寻找重复项:
  1. x <- setNames(seq_len(nrow(e)), paste(e[, 1], e[, 2], sep = "_"))
  2. x[paste(e1[, 1], e1[, 2], sep = "_")]
复制代码
不过,我想我们的代码可能都不是楼主需要的,他是初学者,需要的是“通用点的”,我猜恐怕是最直接的这种:
  1. out <- numeric(0)
  2. for (i in 1:nrow(e1)) {
  3.     for (l in 1:nrow(e)) {
  4.         if (identical(e[l, ], e1[i, ]))
  5.             out <- c(out, l)
  6.     }
  7. }
  8. out
复制代码
已有 1 人评分论坛币 学术水平 收起 理由
jiangbeilu + 10 + 2 精彩帖子

总评分: 论坛币 + 10  学术水平 + 2   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 10:02