在 r 中使用 for 循环删除列表中定义的数据框中的列
in r drop columns in dataframe defined in a list using a for loop
我有一个数据框,我想删除列表中定义的列。
首先,我从现有的数据框中制作了一份样本列表(我想保留):
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
基本和鸭子的回答一样:
library(dplyr)
test_df %>%
select(!df_1$sample)
returns
col2 col4
1 1 aa
2 2 bb
3 3 cc
4 4 dd
5 5 ee
我有一个数据框,我想删除列表中定义的列。
首先,我从现有的数据框中制作了一份样本列表(我想保留):
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
基本和鸭子的回答一样:
library(dplyr)
test_df %>%
select(!df_1$sample)
returns
col2 col4
1 1 aa
2 2 bb
3 3 cc
4 4 dd
5 5 ee