[英]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.