R dataframe:查找第2列中与第2列

时间:2018-02-08 21:59:00

标签: r dataframe

假设我有一个数据框

xy.df <- data.frame(x = runif(10), y = runif(10))

我想做的是:

  1. 在第1列中创建非冗余项目列表
  2. 对于此列表中的每个项目(第1列中的项目),请在第2列中标识相应项目的列表
  3. 我已尝试使用dplyr进行一些测试,但我仍然没有得到它!

    df = xy.df %>% group_by(xy.df$x)
    

    任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

很抱歉,我想用前面的示例简化我的问题,所以这里有一个数据框的小例子

idProcess | ip |端口|

5aa78 | 128.55.12.81 | 9265

5aa78 | 128.55.12.81 | 59264

9a978 | 130.50.12.99 | 63925

.....

所以我想要的是一个列表列表,其中全局列表中的每个条目(如果进程名称),每个进程获得一个列表中的非冗余IP和非冗余端口列表,即

列表[“5aa78”] =(128.55.12.81,9265,59264)

列表[“9a978”] =(130.50.12.99,63925) ....

感谢

答案 1 :(得分:0)

试试这个:

您的data.frame:

db<-data.frame(idProcess=c("5aa78","5aa78","9a978"),
                ip=c("128.55.12.81","128.55.12.81","130.50.12.99"),
                port=c(9265,59264,63925))

建立你的输出(不是最有效的方式,但我很清楚我在做什么)

list<-NULL
id_unique<-as.character(unique(db$idProcess)) 
for (i in 1:length(id_unique))
{
   ip_i<-unique(as.character(db[as.character(db$idProcess)==id_unique[[i]],"ip"]))
   list[eval(id_unique[[i]])]<-list(c(ip_i,unique(as.character(db[as.character(db$idProcess)==id_unique[[i]],"port"]))))
}

您的输出

list
$`5aa78`
[1] "128.55.12.81" "9265"         "59264"       

$`9a978`
[1] "130.50.12.99" "63925"