删除列表中数据框中的列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除列表中数据框中的列相关的知识,希望对你有一定的参考价值。

我根据A列中的因子级别从我的数据框中创建了一个列表。在列表中我想删除该列。我的头说是lapply,但不是别的什么:P

$A
ID Test
A   1
A   1

$B
 ID Test
 B   1
 B   3
 B   5

进入这个

$A
Test
 1
 1

$B
Test
 1
 3
 5
答案

假设你的列表被称为myList,这样的东西应该工作:

lapply(myList, function(x) { x["ID"] <- NULL; x })

Update

对于更通用的解决方案,您还可以使用以下内容:

# Sample data
myList <- list(A = data.frame(ID = c("A", "A"), 
                              Test = c(1, 1), 
                              Value = 1:2), 
               B = data.frame(ID = c("B", "B", "B"), 
                              Test = c(1, 3, 5), 
                              Value = 1:3))
# Keep just the "ID" and "Value" columns
lapply(myList, function(x) x[(names(x) %in% c("ID", "Value"))])
# Drop the "ID" and "Value" columns
lapply(myList, function(x) x[!(names(x) %in% c("ID", "Value"))])
另一答案

如果你是tidyverse用户,有一个替代解决方案,它利用map包中的purrr函数。

# Create same sample data as above
myList <- list(A = data.frame(ID = c("A", "A"), 
                              Test = c(1, 1), 
                              Value = 1:2), 
               B = data.frame(ID = c("B", "B", "B"), 
                              Test = c(1, 3, 5), 
                              Value = 1:3))
# Remove column by name in each element of the list
map(myList, ~ (.x %>% select(-ID)))
另一答案

如果您的数据框不包含ID列,则可以使用map_if将其删除。

myList <- list(A = data.frame(ID = c("A", "A"), 
                          Test = c(1, 1), 
                          Value = 1:2), 
           B = data.frame(ID = c("B", "B", "B"), 
                          Test = c(1, 3, 5), 
                          Value = 1:3),
           C = data.frame(Test = c(1, 3, 5), 
                          Value = 1:3))
map_if(myList, ~ "ID" %in% names(.x), ~ .x %>% select(-ID), .depth = 2)
另一答案

我们可以在这里有效地使用括号函数"["

Example

L <- replicate(3, iris[1:3, 1:4], simplify=FALSE)  # example list

按数字删除列

lapply(L, "[", -c(2, 3))

按名称删除列

lapply(L, "[", -grep(c("Sepal.Width|Petal.Length"), names(L[[1]])))

结果

# [[1]]
#   Sepal.Length Petal.Width
# 1          5.1         0.2
# 2          4.9         0.2
# 3          4.7         0.2
# 
# [[2]]
#   Sepal.Length Petal.Width
# 1          5.1         0.2
# 2          4.9         0.2
# 3          4.7         0.2

以上是关于删除列表中数据框中的列的主要内容,如果未能解决你的问题,请参考以下文章

删除列表中数据框中的列

从数据框中删除不包括一组列的列中的nan行。

对 pandas 数据框中的列使用 map()

基于具有列表值的多列删除数据框中的重复行[重复]

Spark基于其他数据框中的列对数据框中的列进行重复数据删除

从scala中的数据框中删除不需要的列