【问题标题】:in r drop columns in dataframe defined in a list using a for loop在使用 for 循环在列表中定义的数据框中删除列
【发布时间】:2023-03-18 19:08:01
【问题描述】:

我有一个数据框,我想删除列表中定义的列。

首先,我从现有数据框中列出了样本(我想保留):

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]
          }
     }

但是这段代码不起作用。执行此任务的更好方法是什么?我哪里错了?

【问题讨论】:

  • 如果您不坚持使用for 循环,您可以这样做:test_df[, setdiff(names(test_df), samplename[[1]][["sample"]])]

标签: r list dataframe multiple-columns drop


【解决方案1】:

你可以试试:

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

【讨论】:

  • @MoniquePlandsoen 太好了!如果您对这个答案感到满意,您可以接受吗? :)
【解决方案2】:

和鸭子的回答基本一样:

library(dplyr)

test_df %>%
  select(!df_1$sample)

返回

  col2 col4
1    1   aa
2    2   bb
3    3   cc
4    4   dd
5    5   ee

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多