簡體   English   中英

在R中為數據幀中的所有列剪切函數

[英]Cut function in R for All Columns in Dataframe

在data.frame(wd)中,我有幾列(X1000mb,X950mb,X800mb ...... Xn)。 當我在一列上執行cut(as.vector)功能時,它可以工作(見下文)

wd1<-cut(((as.vector(wd$X850mb)) +  360/(16*2) )%% 360,
           seq(0,360,360/16) ,c('N', 'NNE', 'NE', 'ENE', 
                                'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 
                                'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'))

但是,當我嘗試將它應用於整個數據框 - 所有列 - 我收到一個錯誤。

wdx<-cut(((as.vector(wd)) +  360/(16*2) )%% 360,
           seq(0,360,360/16) ,c('N', 'NNE', 'NE', 'ENE', 
                                'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 
                                'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'))

錯誤是Error in cut.default(((as.vector(wd)) + 360/(16 * 2))%%360, seq(0, 360, : 'x' must be numeric中的Error in cut.default(((as.vector(wd)) + 360/(16 * 2))%%360, seq(0, 360, : 'x' must be numeric

dput的數據幀是這樣的

dput(head(wd))
structure(list(X1000mb = c(86L, 130L, 75L, 59L, 56L, 69L), X925mb = c(70L, 
45L, 30L, 66L, 54L, 71L), X850mb = c(355L, 349L, 350L, 65L, 36L, 
56L), X700mb = c(331L, 342L, 329L, 35L, 1L, 44L), X600mb = c(328L, 
328L, 321L, 0L, 247L, 227L), X500mb = c(331L, 324L, 317L, 331L, 
251L, 241L), X400mb = c(340L, 328L, 310L, 296L, 261L, 246L), 
    X300mb = c(336L, 334L, 328L, 295L, 259L, 262L), X250mb = c(334L, 
    333L, 348L, 300L, 259L, 279L), X200mb = c(336L, 330L, 356L, 
    331L, 257L, 282L), X150mb = c(333L, 327L, 346L, 342L, 277L, 
    279L), X100mb = c(317L, 326L, 325L, 318L, 260L, 274L), X70mb = c(323L, 
    326L, 332L, 306L, 277L, 276L), X50mb = c(350L, 4L, 352L, 
    328L, 305L, 311L), X30mb = c(5L, 42L, 32L, 15L, 29L, 12L), 
    X20mb = c(3L, 42L, 48L, 30L, 46L, 45L), X10mb = c(28L, 25L, 
    4L, 14L, 104L, 76L)), .Names = c("X1000mb", "X925mb", "X850mb", 
"X700mb", "X600mb", "X500mb", "X400mb", "X300mb", "X250mb", "X200mb", 
"X150mb", "X100mb", "X70mb", "X50mb", "X30mb", "X20mb", "X10mb"
), row.names = c(NA, 6L), class = "data.frame")

我試圖將as.numeric應用於數據幀,但它仍無法正常工作。 嘗試了一個子集wd[1:17]它不起作用。

我究竟做錯了什么? 建設性的批評是被接受的。 請記住,我還在學習R.謝謝。

您應該嘗試apply

 apply(wd, 2, function(x) cut(((as.numeric(x)) +  360/(16*2) )%% 360,
+     seq(0,360,360/16) ,c('N', 'NNE', 'NE', 'ENE', 
+                          'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 
+                          'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW')))
     X1000mb X925mb X850mb X700mb X600mb X500mb X400mb X300mb X250mb X200mb X150mb X100mb X70mb X50mb
[1,] "E"     "ENE"  "N"    "NNW"  "NNW"  "NNW"  "NNW"  "NNW"  "NNW"  "NNW"  "NNW"  "NW"   "NW"  "N"  
[2,] "SE"    "NE"   "N"    "NNW"  "NNW"  "NW"   "NNW"  "NNW"  "NNW"  "NNW"  "NNW"  "NW"   "NW"  "N"  
[3,] "ENE"   "NNE"  "N"    "NNW"  "NW"   "NW"   "NW"   "NNW"  "NNW"  "N"    "NNW"  "NW"   "NNW" "N"  
[4,] "ENE"   "ENE"  "ENE"  "NE"   "N"    "NNW"  "WNW"  "WNW"  "WNW"  "NNW"  "NNW"  "NW"   "NW"  "NNW"
[5,] "NE"    "NE"   "NE"   "N"    "WSW"  "WSW"  "W"    "W"    "W"    "WSW"  "W"    "W"    "W"   "NW" 
[6,] "ENE"   "ENE"  "NE"   "NE"   "SW"   "WSW"  "WSW"  "W"    "W"    "WNW"  "W"    "W"    "W"   "NW" 
     X30mb X20mb X10mb
[1,] "N"   "N"   "NNE"
[2,] "NE"  "NE"  "NNE"
[3,] "NNE" "NE"  "N"  
[4,] "NNE" "NNE" "NNE"
[5,] "NNE" "NE"  "ESE"
[6,] "NNE" "NE"  "ENE"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM