【问题标题】:What's wrong with tapply (args are unequal length) in this case?在这种情况下,tapply(args 长度不等)有什么问题?
【发布时间】:2016-09-14 20:23:51
【问题描述】:

数据取自http://open.canada.ca/data/en/dataset/b52664cf-bfd9-49ad-849a-cb88c92553b9(英文版)

 glacier <- read.csv("glacier.csv", stringsAsFactors = F)
 str(glacier)
'data.frame':   518 obs. of  6 variables:
 $ Ref_Date  : int  1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 ...
 $ GEO       : chr  "Helm Glacier - southern Coast Mountains (Garibaldi Provincial Park), British Columbia" "Helm Glacier - southern Coast Mountains (Garibaldi Provincial Park), British Columbia" "Helm Glacier - southern Coast Mountains (Garibaldi Provincial Park), British Columbia" "Helm Glacier - southern Coast Mountains (Garibaldi Provincial Park), British Columbia" ...
 $ MEASURE   : chr  "Annual mass balance" "Annual mass balance" "Annual mass balance" "Annual mass balance" ...
 $ Vector    : chr  "v54326054" "v54326054" "v54326054" "v54326054" ...
 $ Coordinate: num  1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 1.1 ...
 $ Value     : chr  "-1460.0" "-780.0" "-2730.0" "-940.0" ...

tapply(X = as.numeric(glacier[glacier$MEASURE == "Annual mass balance", c("Value")]), 
                      INDEX = unique(glacier[ , 2]), FUN = median, na.rm = T)

给出错误: tapply 错误(as.numeric(glacier[glacier$MEASURE == "Annual mass balance", : аргументы должны иметь одинаковую длину 我检查了参数,它们对于 tapply 函数来说似乎很正常。不知道,怎么了。提前致谢。

编辑:

tapply(X = as.numeric(glacier[glacier$MEASURE == "Annual mass balance", c("Value")]), 
                      INDEX = glacier[ , 2], FUN = median, na.rm = T)

给出同样的错误

【问题讨论】:

  • 俄语(?)错误信息是什么意思?
  • INDEX 应该与tapply 中的X 长度相同。所以尝试删除unique
  • 我已经翻译成标题“args are unequal length”
  • 这是我第一次做的,它给出了同样的错误
  • 非常感谢你让我知道发生了什么。我没有对索引值进行子集化。让它回答我会接受它!

标签: r tapply


【解决方案1】:

您正在尝试对冰川数据框进行子集化,我希望glacier$Measure !="Annual mass balance" 中有一个或多个元素。因此glacier[glacier$MEASURE == "Annual mass balance", c("Value")] 的列长度不等于glacier[ , 2] 的长度。如果这是真的,那么您还需要对索引进行子集化。

这是一个创建数据子集以提高可读性的解决方案:

glacier <- read.csv("01530102-eng.csv", stringsAsFactors = F)

glacierreduced<-glacier[glacier$MEASURE == "Annual mass balance",]
tapply(X = as.numeric(glacierreduced$Value),  INDEX = glacierreduced[ , 2],  
       FUN = median, na.rm = T)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2017-07-09
    • 1970-01-01
    • 2016-05-12
    • 2013-04-23
    • 1970-01-01
    相关资源
    最近更新 更多