2017-07-14 90 views
0

我想創建一個函數,它首先查看列是否存在,然後如果該列存在,執行計算,如果不存在,則保留原始變量。R:使用ifelse語句來檢查列是否存在,然後執行計算

下面是一些數據,我在想辦法:

thisdata <- data.frame(vara = seq(from = 1, to = 20, by = 2) 
        ,varb = seq(from = 1, to = 20, by = 1)) 

thisdata$varc <- with(thisdata, ifelse("vard" %in% colnames(thisdata), vara - vard, vara)) 

所以,很顯然「vard」是不是在數據幀,但是我沒有得到原來的「翻」變回爲我的新變量(只有1個')。當然,我可能會有'vard'變量的另一個數據框。

感謝幫助!

回答

4

在這種情況下,您不需要矢量化形式if。嘗試使用

thisdata$varc <- with(thisdata, if ("vard" %in% colnames(thisdata)) vara - vard else vara) 
1

是不是有原因想要使用ifelse?當試圖做一些複雜的事情時,我更喜歡使用if,但這只是我的偏好。

thisdata$varc <- if("vard" %in% names(thisdata)) { 
    thisdata$vara - thisdata$vard 
} else { 
    thisdata$vara 
} 
2

試試這個,根據你的努力。

thisdata$varc <- with(thisdata,ifelse(rep("vara" %in% colnames(thisdata),dim(thisdata)[1]), vara - varb, vara)) 

我覺得這個環節也有利於:https://www.programiz.com/r-programming/ifelse-function

ifelse:返回值是與長度相同test_expression向量(length("vara" %in% colnames(thisdata)) = 1,這就是你得到了所有1(。 vara的第一個值)在你原來的嘗試中)

相關問題