R 编程新手! - 中值循环函数中断



所以下面的函数使用了一个非常大的数据帧。 这个DF的两列是房屋建造的年份,另一列是成本。

我想输入列名,在本例中为 ds$Build 作为函数参数

YearCount <- 唯一值数的长度,年份,以 DS$Build 为单位

YearList <- 唯一值的向量,年份,以 ds$Built 为单位

然后我希望它对 YearCount 迭代次数进行 for 循环,其中它采用 Cost06 中值的中位数,但仅当 ds$Built 中的值 = YearList 中的值时[i]

取结果中位数并将其附加到空向量 CostVec

最后,制作一个 2 列数据帧 年份列表 和 iMedian.


但这行不通。它正在执行您在下面看到的操作,它将相同的中值(循环中最后一次迭代的值)分配给所有年份,而不是提供每年的结果。

我是新手,所以非常感谢您的耐心等待。

Median.DF <- function(x)
{                 
YearCount <- length(unique(x))
YearList <- unique(x)
CostVec <- c()
for (i in YearCount) {
imedian <- median(ds[x == YearList,"COST06"],na.rm = TRUE)
CostVec <- append(CostVec,imedian)
}
MedianCost.data <- data.frame(YearList, CostVec)
return(MedianCost.data)
}
YearList CostVec
1      2004    1629
2      2007    1629
3      2005    1629
4      1980    1629
5      1985    1629
6      2003    1629
7      2008    1629
8      1990    1629
9      1975    1629
10     1970    1629
11     1950    1629
12     1920    1629
13     1960    1629
14     1930    1629
15     1919    1629
16     1940    1629
17     1995    1629
18     2006    1629
19     2009    1629
20     2000    1629
21     2002    1629
22     2001    1629
23     2010    1629
24     2011    1629
25     2012    1629
26     2013    1629

这是一个更好(更干净,更像R)的方法。我会把它留给你把它变成函数。

df <- data.frame(YearList=sample(2000:2006,30, replace=T), CostVec=10^3+100*runif(30,0,1))
dfSplit <- split(df, df$YearList)
medianByYears <- lapply(dfSplit, function(x) median(x$CostVec))
medianByYearsClean <- do.call(rbind, medianByYears)
data.frame(Years=rownames(medianByYearsClean), MedianPrices=medianByYearsClean, row.names=NULL)

其他一些提示:

在编写函数之前,只需在函数外部逐行测试每一行即可。这里的主要问题是:

for (i in YearCount) { do stuff }

类似于

for (i in 5){print(i)}

只做一件事一次。你想做:

for (i in seq(YearCount)) { do stuff }

最新更新