r - 在使用 for 循环在列表中定义的数据框中删除列
问题描述
我有一个数据框,我想删除列表中定义的列。
首先,我从现有的数据框中列出了样本(我想保留):
df_1 <- data.frame(sample = c("col1","col3"), gender = c("m","v"))
samplename <- list(df_1)
然后我想从另一个数据框中删除不在此样本名称列表中的列:
test_df <- data.frame(col1 = c("a", "b", "c", "d", "e"), col2 = seq(1, 5), col3 = rep(3, 5), col4 = c("aa","bb","cc","dd","ee"))
for (col in colnames(test_df)){
if (!(col %in% samplename[[1]])){
test_df <- test_df[, col, drop = TRUE]
}
}
但是这段代码不起作用。执行此任务的更好方法是什么?我哪里错了?
解决方案
你可以试试:
test_df[,!(names(test_df) %in% df_1$sample)]
col2 col4
1 1 aa
2 2 bb
3 3 cc
4 4 dd
5 5 ee
推荐阅读
- python - 如何在熊猫系列中用 Nan 替换非字符串值?
- hyperledger-fabric - 由于先前的块哈希不匹配,Hyperledger Fabric 节点出现恐慌
- netty - Netty 4 中 ChannelHandlerContext.sendUpstream 的替代品是什么
- spring-boot - Maven对系统范围依赖的传递依赖
- php - 使用 PHP 运行 HTML 上传表单时出现问题
- flutter - 在颤振中添加两个Textformfields控制器
- flutter - 如何在颤动中删除新页面中的箭头?
- go - 如何通过 client-go 使用复杂的 LabelSelector 列出我的 k8s 作业?
- python - 如何在两个值之间进行选择,使用一个 60% 的时间和另一个 40% 的时间
- security - 是否有一种可以双向使用的哈希技术?