簡體   English   中英

根據另一個數據框中的值刪除一個數據框中的列 - 條件循環

[英]Removing Columns in one data frame based on values of another - conditional looping

嗨,所以我在遍歷我的數據框並根據抑制 = 1 的條件刪除列時遇到問題。因此循環需要遍歷 df1 的每一列並刪除同一變量的列抑制 = 1。 它需要確定抑制 = 1 的特定行在兩個 df 中具有相同的變量。

所以有兩個數據框。 df1 包含所有數據,df2 包含基於 df1 變量的條件。

df1 <- data.frame("ID" = c(1,2,3,4,5), "Age" = c(19,50,46,32,28))

df2 <- data.frame("Variable" = c("ID", "Age"), "Suppress" = c(1,0))

我遇到的主要問題是,當我制作 df1 和 df2 等數據框時,我目前擁有的循環適用,但不適用於我導入 csv 文件並使用該數據時。

可能是數據幀的格式,還是需要調整循環才能用於 csv 導入? 我懷疑是后者。

這是我目前擁有的循環:

for(i in names(df1)){
   if(df2$Variable == names(df1[i]) & df2$Suppress == 1){
      df1[i] <- NULL
   }
}

另一個版本...基本相同

for(i in names(df1)){
   if(df2$Variable %in% names(df1[i]) & df2$Suppress == 1){
      df1[i] <- NULL
   }
}

我無法在此處發布 csv,但我建議嘗試使用類似於 df1 和 df2 的導入 csv 文件運行上述代碼。

注意:df1 和 df2 都作為 csv 文件導入。

回顧:為什么當前循環不適用於導入的 csv 數據,以及基於 df2 的抑制變量刪除列的替代方法是什么。

謝謝

我相信您發布的代碼中的邏輯不正確,您應該將df2$Variable每個值與names(df1)

for(i in seq_along(nrow(df2))){
  if(df2$Variable[i] %in% names(df1) && df2$Suppress[i] == 1){
    df1[i] <- NULL
  }
}

df1
#  Age
#1  19
#2  50
#3  46
#4  32
#5  28

一種完全沒有循環的矢量化方式如下。

inx <- (names(df1) %in% df2$Variable) & (df2$Suppress == 1)
df1[!inx]
#  Age
#1  19
#2  50
#3  46
#4  32
#5  28

暫無
暫無

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

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