![](/img/trans.png)
[英]Deleting rows and columns of a data frame based on values of another data frame
[英]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.