将R中的数据帧转换为Python字典'

时间:2018-06-14 09:49:35

标签: r list dictionary dataframe

我有2列数据框(df),例如

Project:      Person: 
1            a            
1            b              
2            a           
3            a
3            d
4            b
4            c
4            d

我想了解每个人参与哪些项目的信息。类似于Python词典的东西。

'a': {1, 2, 3}, 'b': {1, 4}, 'c': {4}, 'd': {3, 4}

我知道R不支持词典,但使用列表可能有类似的东西吗?

那么我可以检查一下他们参加哪些项目等(相交)

2 个答案:

答案 0 :(得分:2)

我们可以使用by

lst <- by(df, df$Person, FUN = function(x) x$Project)
#df$Person: a
#[1] 1 2 3
#------------------------------------------------------------
#df$Person: b
#[1] 1 4
#------------------------------------------------------------
#df$Person: c
#[1] 4
#------------------------------------------------------------
#df$Person: d
#[1] 3 4

by的返回对象仅为list,因此您可以使用lapply / sapply轻松操作其元素。

例如,要按Person对条目求和,您可以

sapply(lst, sum)
#a b c d
#6 5 4 7

样本数据

df <- read.table(text =
    "Project:      Person:
1            a
1            b
2            a
3            a
3            d
4            b
4            c
4            d", header = T)

答案 1 :(得分:2)

您可以将data.frame拆分为列表并将其转换为JSON:

jsonlite::toJSON(split(d$Project, d$Person))
{"a":[1,2,3],"b":[1,4],"c":[4],"d":[3,4]} 

如果要在R中使用以下数据,请使用简单列表:

split(d$Project, d$Person)

数据:

structure(list(Project = c(1L, 1L, 2L, 3L, 3L, 4L, 4L, 4L), Person = c("a", 
"b", "a", "a", "d", "b", "c", "d")), row.names = c(NA, -8L), class = "data.frame")