ฉันสร้างรายการจาก dataframe ของฉันตามระดับปัจจัยในคอลัมน์ 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
ฉันสร้างรายการจาก dataframe ของฉันตามระดับปัจจัยในคอลัมน์ 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 })
สำหรับวิธีแก้ปัญหาทั่วไป คุณสามารถใช้คำสั่งต่อไปนี้:
# 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"))])
x[length(x)] <- NULL
แทนเหรอ?
- person A5C1D2H2I1M1N2O1R2T1; 14.01.2016
; x
จะไม่มีอะไรได้รับคืนเลย....
- person A5C1D2H2I1M1N2O1R2T1; 18.10.2016
หากคุณเป็นผู้ใช้ 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)))
เราสามารถใช้ฟังก์ชันวงเล็บปีกกา "["
ได้อย่างมีประสิทธิภาพที่นี่
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
หากคุณมีกรอบข้อมูลที่ไม่มีคอลัมน์ 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)