【发布时间】:2015-05-03 17:09:37
【问题描述】:
我正在从 Mathematica 迁移到 R,在那里我不需要在导入期间预测数据结构,特别是在导入之前我不需要预测数据的矩形度。
我有很多文件.csv文件格式如下:
tasty,chicken,cinnamon
not_tasty,butter,pepper,onion,cardamom,cayenne
tasty,olive_oil,pepper
okay,olive_oil,onion,potato,black_pepper
not_tasty,tomato,fenugreek,pepper,onion,potato
tasty,butter,cheese,wheat,ham
行有不同的长度,并且只包含字符串。
在 R 中,我应该如何解决这个问题?
您尝试过什么?
我试过read.table:
dataImport <- read.table("data.csv", header = FALSE)
class(dataImport)
##[1] "data.frame"
dim(dataImport)
##[1] 6 1
dataImport[1]
##[1] tasty,chicken,cinnamon
##6 Levels: ...
我从文档中将其解释为单个列,每个成分列表都作为不同的行。我可以按如下方式提取前三行,每一行都是classfactor,但似乎包含的数据比我预期的要多:
dataImport[c(1,2,3),1]
## my rows
rowOne <- dataImport[c(1),1];
class(rowOne)
## "factor"
rowOne
## [1] tasty,chicken,cinnamon
## 6 Levels: not_tasty,butter,cheese [...]
就我目前所处理的这个问题而言,如果read.table 适合这种数据结构,我将不胜感激。
我的目标是按每行的第一个元素对数据进行分组,并分析每种配方之间的差异。如果它有助于影响数据结构建议,我会在 Mathematica 中执行以下操作:
dataImport=Import["data.csv"];
tasty = Cases[dataImport, {"tasty", ingr__} :> {ingr}]
回答讨论
@G.Grothendieck 提供了使用read.table 和使用reshape2 包进行后续处理的解决方案——这似乎非常有用,我稍后会进行调查。这里的一般建议解决了我的问题,因此接受。
@MrFlick 关于使用tm 包的建议对于以后使用DataframeSource 进行分析很有用
【问题讨论】:
-
导入后的数据要做什么?大多数 R 的“数据”结构和基本函数最适合矩形数据。你只想要一个字符向量列表吗?您想如何分析差异?
-
@MrFlick 我有兴趣分析每个类别中哪些成分最常见(美味、非美味),这需要进行统计等。我已经稍微简化了我的问题以使问题更小。我在 Mathematica 中使用的实际数据作为一个半有趣的机器学习示例的一部分..
-
这实际上与mathematica 没有任何关系吧?你能把那个标签删掉吗?
-
你是对的,已编辑 - 对此感到抱歉。