![](/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.