我有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不支持词典,但使用列表可能有类似的东西吗?
那么我可以检查一下他们参加哪些项目等(相交)
答案 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")