【发布时间】:2018-08-14 17:36:34
【问题描述】:
我有一个数据数组,我试图仅对 OR 和 WA 状态的数据进行子集化。我正在尝试使用 STATE 行,并选择带有缩写 OR 和 WA 的任何内容。当我运行脚本时,我得到了
Error in dat_trans[dat_trans, "STATE" == "OR", ] :
incorrect number of dimensions
这是我正在处理的数据:
dat_trans <- structure(c(
"10263500", " 59.46390", "34.42083", "-117.8395", "CA", "old", NA,
"10281800", " 31.38300", "36.77854", "-118.2645", "WA", "new", NA,
"14037500", " 18.23760", "44.34155", "-118.6566", "OR", "new", NA
), .Dim = c(7L, 249L), .Dimnames = list(c("STAT_ID",
"DRAIN_AREA", "LAT", "LON", "STATE", "STUDY", "HUC_BASIN"), NULL))
那么这是我尝试使用的数据子集的脚本
csv_file_name=filelist[1]
dat=read.csv(csv_file_name,header=TRUE,sep=",")
dat_trans=t(dat)
summer_storm_matrix=array()
for (tt in 1:ncol(dat_trans)){
storm_gaugedata=dat_trans[dat_trans,'STATE'=='OR',tt]
summer_storm_matrix=cbind(summer_storm_matrix,storm_gaugedata)
}
【问题讨论】:
-
数据图像有点用处,提供实际数据更有帮助。最好的两种方法是粘贴来自
dput(head(x))的输出并使用data.frame或matrix手动制作数据。查看您的代码,看来这实际上是data.frame,而不是array或matrix。在这种情况下,唯一可以在`[.data.frame`中使用第三个“维度”的情况是当您不希望它自动减少为带有drop=参数的向量时,例如mtcars[1,1]与mtcars[1,1,drop=FALSE]。 -
感谢您告诉我,对此深表歉意!如果数据相当大,我是否要粘贴整个数据集?哦,所以这是一个data.frame,而不是一个数组。是否建议将数据转换为数组,以便按状态排序?
-
在决定
data.frame-vs-array时不应考虑“可排序性”,主要考虑 (1) 数据的结构,以及 (2) 您将使用的工具数据。你应该很少发布“你的所有数据”,而是一个有代表性的样本;这可能只是它的前 10 行(例如,dput(head(x))的head);如果前 10 名变异不足,则为随机样本;或非常具体的样本数据,要么是从真实中“挑选”出来的,要么是完全虚构的。 -
在评论中粘贴这样的数据或代码很少奏效,在这种情况下它是不完整的(它从中间开始)。请始终编辑您的问题,并将添加的数据、代码和说明直接放在问题中。