23

列Aの因子レベルに基づいて、データフレームからリストを作成しました。リストで、その列を削除したいと思います。私の頭はラップリーと言っていますが、他には何もありません: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
4

4 に答える 4

50

リストが呼び出されたとするとmyList、次のようなものが機能するはずです。

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

アップデート

より一般的な解決策として、次のようなものを使用することもできます。

# 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"))])
于 2012-09-30T19:45:55.253 に答える
11

ユーザーの場合、パッケージの機能tidyverseを利用する代替ソリューションがあります。mappurrr

# 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)))
于 2018-11-16T22:07:46.690 に答える
6

ここでブラケット関数を効率的に使用でき"["ます。

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
于 2019-04-13T10:52:29.023 に答える
3

列を含まないデータフレームがある場合は、それが存在する場所でのみ削除するために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)
于 2019-04-05T02:53:32.760 に答える