Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在R中使用变量字符串引用对象_String_R_Variables_Loops_Concatenation - Fatal编程技术网

String 在R中使用变量字符串引用对象

String 在R中使用变量字符串引用对象,string,r,variables,loops,concatenation,String,R,Variables,Loops,Concatenation,编辑:感谢到目前为止做出回应的人;我是R方面的初学者,刚刚为我的硕士论文承担了一个大项目,所以我对初始处理有点不知所措。我使用的数据如下(来自WMO公开的降雨量数据): 120 6272100喀土穆15.60 32.55 382 1899 1989 0.0 18990.03 0.03 0.03 0.03 0.03 1.03 13.03 12.03 9999 6.03 0.03 0.03 1900 0.03 0.03 0.03 0.03 0.03 23.03 80.03 47.03 23.03

编辑:感谢到目前为止做出回应的人;我是R方面的初学者,刚刚为我的硕士论文承担了一个大项目,所以我对初始处理有点不知所措。我使用的数据如下(来自WMO公开的降雨量数据):



120 6272100喀土穆15.60 32.55 382 1899 1989 0.0

18990.03 0.03 0.03 0.03 0.03 1.03 13.03 12.03 9999 6.03 0.03 0.03
1900 0.03 0.03 0.03 0.03 0.03 23.03 80.03 47.03 23.03 8.03 0.03 0.03
1901 0.03 0.03 0.03 0.03 0.03 17.03 23.03 17.03 0.03 8.03 0.03 0.03
(……)
120 6272101 JEBEL AULIA 15.20 32.50 380 1920 1988 0.0
1920 0.03 0.03 0.03 0.00 0.03 6.90 20.00 108.80 47.30 1.00 0.01 0.03
1921年0.03 0.03 0.03 0.00 0.03 0.00 88.00 57.00 35.00 18.50 0.01 0.03
1922 0.03 0.03 0.03 0.00 0.03 0.00 87.50 102.30 10.40 15.20 0.01 0.03
(……)

我感兴趣的观测站大约有100个,每个观测站都有不同的降雨测量开始和结束日期。它们在单个数据文件中的格式如上所述,站之间用“120(站号)(站名)”分隔

我首先需要按站点分离此文件,然后提取每年的3月、4月、5月和6月,然后每年总共提取这些月份。到目前为止,我正在处理循环(如下所示),但我明白这不是正确的方法,我宁愿学习一些更好的技术。 再次感谢你的帮助

(原问题:) 我有一个大型数据集,包含100多个地点近100年来的季节降雨量。我试图将这些数据分离成更易于管理的数组,特别是我想检索每年每个站点3月、4月、5月和6月的降雨量总和。 以下是迄今为止我的代码的简化版本:

a <- array(1,dim=c(10,12))
for (i in 1:5) {

  all data:
  assign(paste("station_",i,sep=""), a)

  #march - june data:
  assign(paste("station_",i,"_mamj",sep=""), a[,4:7])
}

a为什么要使用
assign
来创建变量,如
station1
station2
station\u 3\u mamj
等等?将它们存储在列表中会更容易、更直观,例如
站点[[1]]
站点[[2]]
站点[[3]]
,等等。然后可以使用它们的索引访问每一个

由于您处理的每个站点的数据看起来都是相同大小的矩阵,因此您甚至可以将其作为三维矩阵处理

埃塔:顺便说一句,如果你真的想用这种方式解决问题,你应该:

eval(parse(text=paste("station", i, "mamj", sep="_")))

但是不要-使用
eval
几乎总是不好的做法,甚至会使对数据执行简单操作变得困难。

对于最初的问题,请使用get()


i这完全是在乞求一个数据帧,然后它只是一个带有电动工具的线性系统,如
ddply
(功能惊人):

下面是完美的工作代码。我们创建一个数据帧,其列名称为“station_n”;还有年和月的额外列(factor,或者integer,如果您懒惰,请参见脚注)。现在您可以按月或按年进行任意分析(使用plyr的split-apply-combine范例):


这不是一个可复制的示例,因为您没有提供任何数据。我建议你在制作一个可复制的例子时看看这个。正如前面提到的,你可能真的应该使用列表来解决这个问题。如果我们知道你的数据是什么样子,我们可能会帮你更多。例如,从我所能收集到的信息来看,使用
split
lapply
可能会更干净。如果你能制作一个数据框,每列代表一年中的一个月,那么你只需使用
摘要(data.frame)
@Subs就可以得到总和,他想按年进行聚合,但只计算mamj总数。这是拆分应用联合收割机的作业!看到我的ddply一个班轮下面!OP,只要你可以矢量化,就不要使用循环,这是R的力量。如果你允许,我想从“变量”、“循环”、“串联”重新标记为“矢量化”、“循环”、“plyr”?对于
get
,这是正确的。然而,当您所做的只是在每个索引中保存一个变量时,不使用内置类型(如列表和矩阵)是非常愚蠢的。因此,“正如David所说,这可能不是最佳路径”:)
data.frame
比array有优势,我们可以使用异构列,所以我们可以将“年”和“月”列作为因子。。。然后,我们可以按年、月或其任意子集任意拆分应用联合收割机。然而数组对于数据分析来说是非常有限的,问题是他(最初)问的是如何从任意变量名中获取值,而不是他应该如何构造他的问题。正如我在我的帖子中所说的,很明显他做事的方式不对(参见Lumley的fortune()关于eval(parse())的俏皮话)。用data.frames回答(原始)Q,而这实际上并不回答(原始)Q。
i <- 10
var <- paste("test", i, sep="_")
assign(10, var)
get(var)
tot_mamj <- ddply(rain[rain$month %in% 3:6,-2], 'year', colwise(sum))
   year station_1 station_2 station_3 station_4 station_5 ...
1  1972  8.618960  5.697739 10.083192  9.264512 11.152378 ...
2  1973 18.571748 18.903280 11.832462 18.262272 10.509621 ...
3  1974 22.415201 22.670821 32.850745 31.634717 20.523778 ...
4  1975 16.773286 17.683704 18.259066 14.996550 19.007762 ...
...
require(plyr) # for d*ply, summarise
#require(reshape) # for melt

# Parameterize everything here, it's crucial for testing/debugging
all_years <- c(1970:2011)
nYears <- length(all_years)  
nStations <- 101
# We want station names as vector of chr (as opposed to simple indices)
station_names <- paste ('station_', 1:nStations, sep='')

rain <- data.frame(cbind(
  year=rep(c(1970:2011),12),
  month=1:12
))
# Fill in NAs for all data
rain[,station_names] <- as.numeric(NA)
# Make 'month' a factor, to prevent any numerical funny stuff e.g accidentally 'aggregating' it
rain$month <- factor(rain$month)

# For convenience, store the row indices for all years, M/A/M/J
I.mamj <- which(rain$month %in% 3:6)

# Insert made-up seasonal data for M/A/M/J for testing... leave everything else NA intentionally
rain[I.mamj,station_names] <- c(3,5,9,6) * runif(4*nYears*nStations)

# Get our aggregate of MAMJ totals, by year
# The '-2' column index means: "exclude month, to prevent it also getting 'aggregated'"
excludeMonthCol = -2
tot_mamj <- ddply(rain[rain$month %in% 3:6, excludeMonthCol], 'year', colwise(sum))

# voila!!
#    year station_1 station_2 station_3 station_4 station_5
# 1  1972  8.618960  5.697739 10.083192  9.264512 11.152378
# 2  1973 18.571748 18.903280 11.832462 18.262272 10.509621
# 3  1974 22.415201 22.670821 32.850745 31.634717 20.523778
# 4  1975 16.773286 17.683704 18.259066 14.996550 19.007762
 ddply(rain[rain$month %in% 3:6, ], 'year', colwise(sum))
Error in Summary.factor(c(3L, 3L, 3L, 3L, 3L, 3L), na.rm = FALSE) : 
  sum not meaningful for factors