我有一个数据源,可以表示为30个数据帧的列表(我说的是数据帧,但是如果存在更好的结构,可以随意回答 - 还没有编写任何内容)。每个数据帧与另一个数据帧没有任何直接关系,但每个数据帧有3列和n行。第1列是标签,第2列和第3列是值(总是数字)。
对于有形性,假设每个数据框都是在聚会上吃的食物清单,每列代表Alice和Bob吃的每个项目的数量。
例如
A = [5 x 3] # (apples, pears, cookies, grapes, watermelon)
# ---------------------------------------------------
# item Alice Bob
# apples 3 7
# pears 1 2
# cookies 10 4
# grapes 238 483
# watermelon 0 1
# ---------------------------------------------------
B = [1 x 3] # (grapes)
C = [3 x 3] # (beef, rice, apples)
...
Z = [4 x 3] # (rice, grapes, watermelon, beef)
我想将这些矩阵表示为数据结构,以便我可以询问
每当我遇到这种问题时,我总是写出包含列表列表的非常丑陋的代码,需要[]
运算符或as.matrix()
/ as.list()
/ as.dataframe()
功能,通常看起来像一个非常糟糕的做事方式。
对于这类数据,什么是goood / best方法?
答案 0 :(得分:4)
根据@ Arun的评论,您可以轻松创建一个数据框,其中另一列显示相关方:
A = read.table(text="item Alice Bob
apples 3 7
pears 1 2
cookies 10 4
grapes 238 483
watermelon 0 1", header=T)
B = read.table(text="item Alice Bob
grapes 13 26", header=T)
C = read.table(text="item Alice Bob
beef 1 3
rice 1 2
apples 1 0", header=T)
Z = read.table(text="item Alice Bob
rice 2 1
grapes 10 15
watermelon 1 0
beef 0 2", header=T)
A$party = "A"; B$party = "B"; C$party = "C"; Z$party = "Z"
dframe = rbind(A, B, C, Z)
从那里,你可以毫无困难地获得列的功能:
apply(dframe[,2:3], 2, sum)
如果您想处理单个项目,并且双方之间存在重复项,则可以对原始数据框执行joins。在R here中执行此操作有一个SO线程。