簡體   English   中英

如何將所有非數字值轉換為數據幀中R中的NA?

[英]How do I convert all nonumeric values to NAs in R in a dataframe?

我有一個名為return的數據框。 如何使以下代碼更簡潔? 我嘗試使用apply,lappply和sapply,但是它們似乎改變了數據框的結構,因此我無法生成相關矩陣。 需要澄清的是:下面的代碼有效,但是我想使其更加簡潔。 謝謝!

returns$VIT <- as.numeric(as.character(returns$VIT))
returns$EFA <- as.numeric(as.character(returns$EFA))
returns$VWO <- as.numeric(as.character(returns$VWO))
returns$VIG <- as.numeric(as.character(returns$VIG))
returns$VNQ <- as.numeric(as.character(returns$VNQ))
returns$iPath.DJP <- as.numeric(as.character(returns$iPath.DJP))
returns$iShares.MUB <- as.numeric(as.character(returns$iShares.MUB))

cor(returns, use="pairwise.complete.obs")

編輯:以下測試代碼不起作用,我試圖弄清楚如何使其工作。

test <- data.frame(c(.04,.2,"blah"),c(.01,.24,"blah"))
colnames(test) <- c("VIT", "EFA")

new <- apply(test, 2, function(x) as.numeric(as.character(x)))
cor(test, use="pairwise.complete.obs")
test <- data.frame(a = rep("bob", 12), b = rep(c(1,23,4), times = 4))
Filter(is.numeric, test)

僅返回test的數字列。 您可以使用lapply(test, is.numeric)自己獲取對/錯結果,並對此進行處理。

這是您要找的東西嗎?

numeric.columns <- c('VIT','EFA','VWO','VIG','VNQ','iPath.DJP','iPath.DJP','iShares.MUB')
returns[,numeric.columns] <- lapply(returns[,numeric.columns], function(x) as.numeric(as.character(x)))
cor(returns, use="pairwise.complete.obs")

只需使用plyrcolwise

returns = colwise(function(x) as.numeric(ifelse(is.numeric(x),x,NA)))(returns)

它接受一個函數並將其應用於所有列。 最終結果應該是數字。 請注意,這會將'1'值視為NA。

暫無
暫無

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

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