簡體   English   中英

如何根據R中另一列中的值設置列值

[英]How to set a column value based on values in another column in R

我正在嘗試根據另一列中的值添加新列。 (基本上如果缺少另一列或0,則將新值設置為0或1)

這個代碼下面有什么問題?

times=nrow(eachfile)
for(i in 1:times)
{eachfile$SalesCycleN0[i] <- ifelse(eachfile$R[i]==NA | eachfile$R[i]==0,0,1 ) }

table(eachfile$SalesCycleN0)

只要您測試過該列只包含0,1和NA我會這樣做:

eachfile$SalesCycleN0 <- 1
eachfile$SalesCycleN0[is.na(eachfile$R) | eachfile$R==0] <- 0

NA沒有“==”。 就這樣做(沒有循環):

eachfile$SalesCycleN0 <- ifelse( is.na(eachfile$R) | eachfile$R==0, 0,1 ) 

如果您在代碼中尋找更多的經濟性,這也可能有效:

eachfile$SalesCycleN0 <- as.numeric( !grepl("^0$", eachfile$R) )

對於NA, grepl返回FALSE。

更有效的方法是使用sapply函數,而不是使用for循環(在大型數據集的情況下很方便)。 這是一個例子:

 df = data.frame(x = c(1,2,0,NA,5))

 fun = function(i) {is.na(df$x[i]) || (df$x[i] == 0)}
 bin <- (sapply(1:nrow(df), FUN = fun))*1  ## multiplying by 1 will convert the logical vector to a binary one.
 df <- cbind(df, bin)

在你的情況下:

 fun = function(i) {is.na(eachfile$SalesCycleNO[i]) || (eachfile$SalesCycleNO[i] == 0)}
 bin <- (sapply(1:times, FUN = fun))*1
 eachfile <- cbind(eachfile, bin)

暫無
暫無

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

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