R 如何在数据帧上循环时删除列?

R 如何在数据帧上循环时删除列?,r,dataframe,R,Dataframe,我有许多数据帧,它们都有一个同名的列;我想循环所有的数据帧来删除这个列 例如: > df1 a b 1 1 2 2 1 2 3 1 2 > df2 a c 1 1 3 2 1 3 3 1 3 我还有一个所有数据帧名称的列表: > df.list [[1]] [1] "df1" [[2]] [1] "df2" 如果我使用df1$a,因为您可以访问tidyverse,下面是一个使用lappy和select的示例 library(tidyverse) list_1

我有许多数据帧,它们都有一个同名的列;我想循环所有的数据帧来删除这个列

例如:

> df1
  a b
1 1 2
2 1 2
3 1 2

> df2
  a c
1 1 3
2 1 3
3 1 3
我还有一个所有数据帧名称的列表:

> df.list
[[1]]
[1] "df1"

[[2]]
[1] "df2"

如果我使用df1$a,因为您可以访问tidyverse,下面是一个使用lappy和select的示例

library(tidyverse)

list_1 <- lapply(1:3, function(i)(tibble(a = sample(1000),
       c = sample(1000)))) ##Creates list of data frames

new_list <- lapply(list_1, function(i) i %>% select(-c)) ##loops through and remove c variable
new_list


##Using a for loop (not as efficient)
new_list2 <- NULL

for(i in 1:length(list_1)){
  new_list2[[i]] <- list_1[[i]] %>% select(-c)
}

new_list2

以整洁、低沉的风格

图书馆管理员 图书馆数据表 > > 载入程辑包:'数据表' >以下对象已从“package:dplyr”屏蔽: > >在…之间,在…之间 >以下对象被“package:purrr”屏蔽: > >转置 DF1b > 1: 2 > 2: 2 > 3: 2 > > [[2]] >c > 1: 3 > 2: 3 > 3: 3
由v0.2.1于2018年11月8日创建,您必须分配变量。当前您所做的只是选择。您需要将其分配回列表。不需要外部包的替代方法可以是:lapplydf.list,functioni{i['a']也许我遗漏了一些东西,但这并没有删除像df$a这样的列。解决方案创建了一个新列表,其中包含不带变量c的数据帧。如果你不想创建一个新对象,你可以简单地为一个新对象使用相同的名称并使用LapplyTanks,现在解决了!因此,主要问题似乎是我使用了一个字符列表数据帧的名称,而不是数据帧的列表。
 lapply(df.list, function(x) {
      get(x) %>% select(-starts_with("a"))

       })
[[1]]
  b
1 2
2 2
3 2

[[2]]
  c
1 3
2 3
3 3
 > df1
  a b
1 1 2
2 1 2
3 1 2
library(tidyverse)

list_1 <- lapply(1:3, function(i)(tibble(a = sample(1000),
       c = sample(1000)))) ##Creates list of data frames

new_list <- lapply(list_1, function(i) i %>% select(-c)) ##loops through and remove c variable
new_list


##Using a for loop (not as efficient)
new_list2 <- NULL

for(i in 1:length(list_1)){
  new_list2[[i]] <- list_1[[i]] %>% select(-c)
}

new_list2