簡體   English   中英

dplyr :: rowwise,mutate和NA錯誤

[英]dplyr::rowwise, mutate, and NA error

我正在嘗試按行使用rowwise並使用可以返回NA值的函數進行mutate ,但出現錯誤。 考慮一下這個人為的例子(顯然不是逐行的情況,而是說明了錯誤):

這有效:

library(dplyr)
data.frame(k=rnorm(10)) %>% mutate(l = ifelse(k > 0, 1, NA))

           k  l
1  -1.40223573 NA
2   1.47581873  1
3   0.35938746  1
4   0.87240448  1
5  -0.61991535 NA
6  -1.88152820 NA
7   0.25837350  1
8  -0.02250385 NA
9   0.92757943  1
10  0.49023792  1

但這給出了一個錯誤:

library(dplyr)
data.frame(k=rnorm(10)) %>% rowwise() %>% mutate(l = ifelse(k > 0, 1, NA))

Error: incompatible types, expecting a numeric vector

注意:我已經提交了關於此答案結果中的錯誤的github問題#1448

2015年10月29日更新:似乎已修復了rowwise()此錯誤。 檢查上面的鏈接以獲取詳細信息。


首先,沒有理由進行逐行操作。

就錯誤而言, NA是邏輯類型。 在此按行操作中,您需要在對ifelse()調用中使用NA_real_ 或者,如本· ifelse() Ben Bolker)在下面的注釋中指出的那樣,您可以將ifelse()as.numeric()包裝ifelse()

data.frame(k = rnorm(10)) %>% 
    rowwise() %>% 
    mutate(l = ifelse(k > 0, 1, NA_real_))
# Source: local data frame [10 x 2]
# Groups: <by row>
# 
#                k     l
#            (dbl) (dbl)
# 1  -1.7105691140    NA
# 2  -0.0702667985    NA
# 3  -0.5505724960    NA
# 4  -0.7444839870    NA
# 5  -0.0005646999    NA
# 6  -0.3702584194    NA
# 7   0.2596026787     1
# 8   0.4149810662    NA  <-- error here pointed out by David A (see comments)
# 9  -0.4698540654    NA
# 10  1.0961705022     1

請注意,您也可以使用整數,例如

mutate(l = ifelse(k > 0, 1L, NA_integer_))

但是您似乎無法在行操作中混用邏輯和實數/整數。

暫無
暫無

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

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